目录
1.ELK概述
2.Elasticsearch概述
3.Elasticsearch 安装
单机版安装
集群安装
4.插件安装
5.Elasticsearch基本操作
1)集群API简单管理
2)查询_cat方法
3)创建索引
4)增加数据
5)查询数据
6)修改数据
7)删除数据
6.kibana安装
ELK是什么?
注:主要作用是搭建分布式日志集群平台
-Elasticsearch:负责日志检索和储存
-Logstash:负责日志的收集和分析、处理
-Kibana:负责日志的可视化
-ELK是一整套解决方案,是三个软件产品的首字母缩写,很多公司都在使用,如:Sina、携程、华为、美团等
-这三款软件都是开源软件,通常是配合使用,而且又先后归于Elastic.co公司名下,故被简称为ELK
ELK架构图例
左边是web集群,中间是logstach日志处理,右边是elasticsearch存储日志集群,kibana读取日志并展示出来
ELK的作用
ELK组件在海量日志系统的运维中,可用于解决
-分布式日志数据集中式查询和管理
-系统监控,包含系统硬件和应用各个组件的监控
-故障排查
-安全信息和事件管理
-报表
ELK的web展示
纵是访问,横是时间
饼图展示
类似于数据库
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful API的Web接口
Elasticsearch是用Java开发的,使用Apache许可条款的开源软件,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
主要特点
-实时分析,文档导向,分布式实时文件存储 -高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards和Replicas)
-接口友好,支持JSON
-没有典型意义的事务
-是一种面向文档的数据库
名词解释
Node: 装有一个ES服务器的节点 Cluster: 有多个Node组成的集群 Document: 一个可被搜索的基础信息单元 Index: 拥有相似特征的文档的集合 Type: 一个索引中可以定义一种或多种类型 Filed: 是ES的最小单位,相当于数据的某一列 Shards: 索引的分片,每一个分片就是一个Shard Replicas: 索引的拷贝
与关系型数据库对比
Relational database | Elasticsearch |
---|---|
Database(库) | Index(索引) |
Table(表) | Type(类型) |
Row(行) | Document(文档) |
Column(列) | Field |
Schema | Mapping |
Index | Everything is indexed |
SQL | Query DSL |
SELECT * FROM table... | GET http://... |
UPDATE table SET | PUT http://... |
由于elk是基于elasticsearch的所以这里先搭建
准备软件包
elasticsearch-6.8.8.rpm filebeat-6.8.8-x86 64.rpm head.tar.gz kibana-6.8.8-x86 64.rpm logs.jsonl.gz logstash-6.8.8.rpm metricbeat-6.8.8-x86 64.rpm
准备服务器
主机 | IP地址 | 配置 |
---|---|---|
es-0001 | 192.168.1.41 | 最低配置2核2G |
es-0002 | 192.168.1.42 | 最低配置2核2G |
es-0003 | 192.168.1.43 | 最低配置2核2G |
es-0004 | 192.168.1.44 | 最低配置2核2G |
es-0005 | 192.168.1.45 | 最低配置2核2G |
注:在启动或者安装ES之前,需要先下载JDK 1.7以上的版本,对于2.0来说,要求JDK1.8以上
检查JDK的版本
使用命令:
~]# java -version ~]# echo $JAVA_HOME # 注:没有安装则安装 ~]# yum -y install java-1.8.0-openjdk
查看JDK的版本,正确安装JDK后,就可以下载安装ES了。
下载文件
在网址:www.elastic.co/downloads 中下载最新版本的ES。
这里是用的6.8.8
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-23
配置主机解析
配置 /etc/hosts
192.168.1.41 es-0001
~]# vim /etc/hosts 192.168.1.41 es-0001 ~]# yum install -y java-1.8.0-openjdk elasticsearch-6.8.8.rpm ~]# vim /etc/elasticsearch/elasticsearch.yml 55: network.host: 0.0.0.0 # 监听地址(所有) # 启动elasticsearch ~]# systemctl enable --now elasticsearch # 查看端口,注意过一分钟再看(因为elasticsearch前半分钟启动,后半分钟如果服务器不适合启动elasticsearch会关闭) ~]# ss -nutlp | grep -E "9200|9300" tcp LISTEN 0 128 [::]:9200 [::]:* users:(("java",pid=3364,fd=209)) tcp LISTEN 0 128 [::]:9300 [::]:* users:(("java",pid=3364,fd=208)) ## 访问测试 ~]# curl http://192.168.1.41:9200/ { "name" : "War Eagle", "cluster_name" : "elasticsearch", "version" : { "number" : "2.3.4", "build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f", "build_timestamp" : "2016-06-30T11:24:31Z", "build_snapshot" : false, "lucene_version" : "5.5.0" }, "tagline" : "You Know, for Search" }
注:es-0001 ... es-0005 所有主机,都要执行以下操作
~]# vim /etc/hosts 192.168.1.41 es-0001 192.168.1.42 es-0002 192.168.1.43 es-0003 192.168.1.44 es-0004 192.168.1.45 es-0005 ~]# yum install -y java-1.8.0-openjdk elasticsearch-6.8.8.rpm ~]# vim /etc/elasticsearch/elasticsearch.yml 17: cluster.name: my-es # 集群的名字 23: node.name: es-0001 # 本机主机名(hosts文件中解析的) 55: network.host: 0.0.0.0 # 监听地址(所有) 68: discovery.zen.ping.unicast.hosts: ["es-0001","es-0002"] # 创建集群的创始人(直接填hosts文件中解析的) ## 启动这里就需要先启动创始人如("es-0001", "es-0002") ~]# systemctl enable --now elasticsearch # 最后访问 ~]# curl http://192.168.1.41:9200/_cluster/health?pretty { "cluster_name" : "my-es", "status" : "green", # 状态是绿色的则是正常 "timed_out" : false, "number_of_nodes" : 5, # 成员数 "number_of_data_nodes" : 5, ... ... }
注:为了方便管理
head插件概述
-它展现ES集群的拓扑结构,并且可以通过它来进行索引 (Index)和节点(Node)级别的操作 -它提供一组针对集群的查询API,并将结果以json和表格形式返回 -它提供一些快捷菜单,用以展现集群的各种状态
Head插件配置管理
插件安装
-插件的本质就是一组网页 -在云主机上安装apache,安装插件(最低配置1CPU1G内存)
下载
## 这里可以准备一台服务器或者直接用现有的服务器搭建一台web服务器 ~]# unzip elasticsearch-head-master.zip ~]# yum install -y httpd ~]# mkdir/var/www/html/head ~]# systemctl enable--now httpd ~]# cp -r elasticsearch-head /var/www/html/head/
-通过云ELK(负载均衡或直接配公网ip,这里负载均衡要监听80和9200,只需要发布一台,多了不安全)把web服务发布到互联网,通过浏览器访问
此时发现集群健康值为“未连接”这里需要授权
## 给es-0001 访问授权 ~]# vim /etc/elasticsearch/elasticsearch.yml # 配置文件最后追加 http.cors.enabled : true http.cors.allow-origin : "*" http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type,Content-Length # 重启生效 ~]# systemctl restart elasticsearch.service
注:星代表主机器,系统自定义
第二种安装方法
接下来,我们来安装elasticsearch-head插件
~]# git clone git://github.com/mobz/elasticsearch-head.git ~]# cp -r elasticsearch-head/ /var/www/html/head/
一切安装完毕后,我们打开浏览器来看一下运行结果,在浏览器输入以下地址
~]# curl http://(你的ip)/head/elasticsearch-head
嗯哼?为什么集群健康值为“未连接”?看到下面这个网址中有问题解决方案
按照说明,添加文中所说的两个参数,添加后的参数信息如下所示
# es配置文件添加 # 开启跨域访问支持,默认为false http.cors.enabled: true # 跨域访问允许的域名地址 http.cors.allow-origin: "*" # 通过为 cluster.initial_master_nodes 参数设置符合主节点条件的节点的 IP 地址来引导启动集群 cluster.initial_master_nodes: ["node-1"] ~]$ grep '^[a-z]' config/elasticsearch.yml cluster.name: esCluster path.data: /opt/elasticsearch-6.7.1/datas path.logs: /opt/elasticsearch-6.7.1/logs bootstrap.memory_lock: true http.port: 9200 http.cors.enabled: true http.cors.allow-origin: "*"
修改完后,我们重启elasticsearch,继续刷新下页面,我们就看到了如下界面
至此,我们的elasticsearch-head插件安装完成。
Elasticsearch是用http协议访问
http请求由三部分组成 -分别是:请求行、消息报头、请求正文 -请求行:Method Request-URIHTTP-Version CRLF解
http请求方法 -常用方法GET,POST,HEAD -其他方法OPTIONSPUTDELETETRACE和CONNECT
Elasticsearch使用的请求方法 增 ------ PUT 删 ------ DELETE 改 ------ POST 查 ------ GET
与Elasticsearch交互的数据需使用json格式
在linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持多种请求模式,自定义请求头等强大功能,是一款综合工具
使用格式: curl -x 请求方法 http://请求地址 curl -H 自定义请求头 http://请求地址
示例
## 步骤一写一个php ~]# vim info.php
random_int(0000,9999)); foreach (array("REMOTE_ADDR", "REQUEST_METHOD", "HTTP_USER_AGENT", "REQUEST_URI") as $i) { $arr[$i] = $_SERVER[$i]; } if($_SERVER['REQUEST_METHOD']=="POST"){ $arr += $_POST; }else{ $arr += $_GET; } print_R($arr); print_R("php_host: \t".gethostname()."\n"); $n = 0; $start = 1; $end = isset($_GET["id"])? $_GET["id"] : 10000 ; for($num = $start; $num <= $end; $num++) { if ( $num == 1 ) continue; for ($i = 2; $i <= sqrt($num); $i++) { if ($num % $i == 0) continue 2; } $n++; } print_R($n."\n"); ?># 步骤二写一个静态html ~]# vim info.html
# 步骤三访问 # 安装php动态解析,并重启apapche ~]# yum -y install php ~]# systemtl restart httpd ~]# curl http://172.17.0.51/info.php ~]# curl -XPOST http://172.17.0.51/info.php ~]# curl -XDELETE http://172.17.0.51/info.php # 静态访问 ~]# curl http://172.17.0.51/info.html
~]# curl -i -v -H "Accept-Encoding:gzip" http://172.17.0.51/info.html # 查看返回请求信息 ## 把访问的内容压缩(默认不开压缩配置,如果要用则需开启,所以只能导入文件则可避开) ~]# curl -H "Accept-Encoding:gzip" http://www.baidu.com -o f2 # 注:此时查看是乱码,所以需要如下操作 ~]# cat f2 | gzip -d -
_cat关键字用来查询集群状态,节点信息等
-显示详细信息(?v),
-显示帮助信息(?help)
# 查询支持的关键字 ~]# curl -XGET http://es-0001:9200/_cat/ # 查具体的信息 ~]# curl -XGET http://es-0001:9200/_cat/master # 显示详细信息 ?v ~]# curl -XGET http://es-0001:9200/_cat/master?v # 显示帮助信息 ?help ~]# curl -XGET http://es-0001:9200/_cat/master?help # 从命令行看集群 ]# curl -XGET http://172.17.0.51:9200/_cat/nodes # 从web页面看集群 ~]# http://172.17.0.51/head/elasticsearch-head/
指定索引的名称,指定分片数量,指定副本数量
创建索引使用 PUT 方法,创建完成以后通过 head 插件验证
注:分片数量尽量和服务器对应
~]# curl -XPUT -H "Content-Type: application/json" http://es-0001:9200/ceshi -d \ '{ "settings":{ "index":{ "number_of_shards": 4, "number_of_replicas": 1 } } }' (回车) -XPUT: # 指定请求头, "Content-Type: application/json" # 格式为json http://es-0001:9200/ceshi : # 要创建的索引名称http://(任意哪台机器):9200/(索引名) -d # 指定数据格式(这里定义了json) "settings" # 设置 "index" # 索引 "number_of_shards" # 数据分片个数 "number_of_replicas" # 副本数
查看,可以看出已经把数据存储随机分配到四个服务上了,另外设置了一个副本(也就是备份),4分片就是分成4份分别存放;1副本就是备份一份,也就是一共两份,此时就可以损坏一台服务,2就是可以损坏两块
删除索引
命令行删除
~]# curl -XDELETE http://172.17.0.51:9200/ceshi4
完成之后恢复
~]# curl -XPUT -H "Content-Type: application/json" http://es-0001:9200/ceshi/teacher/1 -d \ '{ "职业": "诗人", "名字": "李白", "称号": "诗仙", "年代": "唐" }' -XPUT # 写入数据 -H "Content-Type: application/json" # 指定json格式输入 http://es-0001:9200/(索引)/(类型)/id # 指定服务的索引,类型,id -d # 指定数据格式(这里定义了json)
# 命令查看 ~]# curl -XGET http://172.17.0.51:9200/ceshi/teacher/1?pretty { "_index" : "ceshi", "_type" : "teacher", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "职业" : "诗人", "名字" : "李白", "称号" : "诗仙", "年代" : "唐" } } ?pretty # 竖起来看 ?表示传参
web查看
~]# curl -XPOST -H "Content-Type: application/json" http://es-0001:9200/ceshi/teacher/1/_update -d '{ "doc": {"年代":"公元701"}}' -XPOST # 修改数据 -H "Content-Type: application/json" # 指定json格式输入 http://es-0001:9200/(索引)/(类型)/id # 指定服务的索引,类型,id -d # 指定数据格式(这里定义了json) "doc" # 文档 {"年代":"公元701"}}' # 修改内容
web页面查看
# 删除一条 ~]# curl -XDELETE http://es-0001:9200/ceshi/teacher/1 # 删除索引 ~]# curl -XDELETE http://es-0001:9200/ceshi # 注:删除不需要写json格式
准备主机(IP任意)
主机 | IP地址 | 配置 |
---|---|---|
kibana | 192.168.1.46 | 最低配置1核1G |
安装kibana
第一步先下载:
https://www.elastic.co/cn/downloads/past-releases#kibana
~]# vim /etc/hosts 192.168.1.41 es-0001 192.168.1.42 es-0002 192.168.1.43 es-0003 192.168.1.44 es-0004 192.168.1.45 es-0005 192.168.1.46 kibana ~]# yum install -y kibana-6.8.8-x86_64.rpm ~]# vim /etc/kibana/kibana.yml 02 server.port: 5601 # 打开端口 07 server.host: "0.0.0.0" # 监听服务器(默认) 28 elasticsearch.hosts: ["http://es-0002:9200", "http://es-0003:9200"] # elasticsearch的地址(设置高可用,所以要设置两台,第一台是elasticsearch的管理节点) 37 kibana.index: ".kibana" # 开启默认索引 40 kibana.defaultAppId: "home" # 表示默认首页: 113 i18n.locale: "zh-CN" # 设置中文格式 ~]# systemctl enable --now kibana
绑定弹性公网IP,通过 WEB 浏览器验证
导入日志数据
随便搞点日志测试 logs.jsonl.gz 到跳板机
~]# gunzip logs.jsonl.gz ~]# curl -XPOST -H "Content-Type: application/json" http://172.17.0.51:9200/_bulk --data-binary @logs.jsonl
查看,首页点击
使用
选择时间搓挫
创建索引就是告诉kibana我们要用哪个数据去读取分析
存放位置如下图:
但是发现并没有数据,这里是因为默认只有15分钟
查看日志时间
选择范围查看
用鼠标指定查看
制作可视化
拉到最低下,选择饼图
点击刚刚自己写的索引
进入之后就可以看见一个圈,但是里面的信息看不到,这里就需要点击分片拆分了
选择词
选择字段(源地址)
选择完之后点击开关按钮
再次拆分
词是操作系统的意思
按照浏览器再拆