一、基本概念:
ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。
-
Elasticsearch 是一个搜索和分析引擎。
-
Logstash是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等存储库中。
-
Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
ELK日志系统数据流图如下:
一个完整的集中式日志系统,需要包含以下几个主要特点:
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 警告-能够提供错误报告,监控机制
二、分布式图解
三、搭建过程
- master部署Apache服务,并部署logstash收
- Slave1部署elasticsearch和kibana
- Slave2部署elasticsearch
- Proxy 部署elasticsearch
三台elasticsearch构成ELS群集
-
部署elasticsearch(这里以slave1为列)
1.1、由于之前配置好的hosts映射,主机名,防火墙
[root@slave1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
[root@slave1 yum.repos.d]# vi elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
[root@slave1 yum.repos.d]# yum install elasticsearch -y
[root@slave1 yum.repos.d]# yum install java -y
[root@slave1 yum.repos.d]# java -version
1.2、修改配置文件
[root@slave1 yum.repos.d]# cd /etc/elasticsearch/
[root@slave1 elasticsearch]# ls
elasticsearch.yml logging.yml scripts
[root@slave1 elasticsearch]# cp -p elasticsearch.yml elasticsearch.yml.bak
[root@slave1 elasticsearch]# egrep -v "^$|^#" elasticsearch.yml
cluster.name: elk-cluster #集群名称
node.name: slave1 #当前节点名
path.data: /data/elk-data #数据存储位置(目录不存在,需要创建)
path.logs: /var/log/elasticsearch/ #日志文件存放的位置
bootstrap.memory_lock: false
##true:允许内存中的数据交还给SWAP,flase:不允许内存中的数据交还给SWAP。 选择false,因为swap分区实在硬盘上建立的,如果内存不够,数据溢出,分到硬盘上的话,会影响速度
network.host: 0.0.0.0 #监听地址,0.0.0.0表示网段
http.port: 9200 #ES端口号,外部通讯的端口。PS:9300是集群内部通讯端口
discovery.zen.ping.unicast.hosts: ["slave1", "slave2","proxy"] #集群中包含的节点名
[root@slave1 elasticsearch]# mkdir -p /data/elk-data
[root@slave1 elasticsearch]# id elasticsearch
uid=997(elasticsearch) gid=994(elasticsearch) 组=994(elasticsearch)
[root@slave1 elasticsearch]# chown elasticsearch.elasticsearch /data/elk-data/
[root@slave1 elasticsearch]# systemctl start elasticsearch.service
[root@slave1 ~]# systemctl enable elasticsearch
[root@slave1 elasticsearch]# netstat -anpt | grep 9200
[root@slave1 elasticsearch]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 10128/java
网页测试:
群集健康状态检查
群集属性状态 ,可以看到群集内部通信端口9300
-
安装elasticsearch-head插件(可视化工具,以slave1为列)
2.1、安装
root@slave1-elasticsearch]#/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
安装位置:/usr/share/elasticsearch/plugins/head
创建一个索引信息,创建索引为index-demo,类型为test,可以看到成功创建,这里的数据会被存储到ES集群中。[root@slave1 head]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello}'
刷新一下,可以看到存储的分片处理与备份,暂时不存在节点间的主备关系。加粗的是主文件的,细框的是备份文件,不论哪个节点宕机,存储都不会丢失,很安全,三个节点共10个分片
利用组件的复合查询进行索引的创建、查询、删除
创建索引index-demo2
提交后查看:
可看到分片存储情况
查询
设置主备节点,slave1为主,slave2为备,proxy为备
先关闭slave2、proxy的elasticsearch,重启slave1服务,再开启slave2、proxy (主备由先后开启服务决定),刷新查看分片情况:
-
elasticsearch的监控组件安装
3.1、生产环境中要修改
[root@slave1 ~]# vi /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535
#解决de-01和node-02日志提示不让锁内存 #末尾插入 elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited systemctl stop elasticsearch.service systemctl start elasticsearch.service 访问:http://192.168.254.241:9200/_plugin/kopf/#!/cluster
-
部署Apache、logstash(master部署)
4.1、安装httpd
[root@master ~]# yum install httpd -y [root@master ~]# systemctl enable httpd 查看日志: [root@master ~]# ll /var/log/httpd/ 总用量 2544 -rw-r--r-- 1 root root 2588919 6月 7 15:10 access_log -rw-r--r-- 1 root root 11353 6月 8 10:28 error_log
4.2、安装logstash #准备yum源
[root@master ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch [root@master ~]# cd /etc/yum.repos.d/ [root@master yum.repos.d]# vim logstash.repo [logstash-2.1] name=Logstash repository for 2.1.x packages baseurl=http://packages.elastic.co/logstash/2.1/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enable=1 [root@master ~]# yum install logstash -y [root@master ~]# ln -s /opt/logstash/bin/logstash /usr/local/bin/ [root@master ~]# systemctl start logstash.service [root@master ~]# systemctl enable logstash.service 下载java [root@master ~]# yum install java -y [root@master ~]# java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (build 1.8.0_292-b10) OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
logstash(Apache)与elasticsearch (node)功能是否正常,做对接测试 logstash字段描述解释: -f通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash -e后面跟着字符串该字符串可以被当做logstash的配置(如果是””,则默认使用stdin 做为输入、stdout作为输出) -t测试配置文件是否正确,然后退出 定义输入和输出流,类似管道,并验证输入输出 注: -e 执行操作 input 标准输入 { input } 插件 output 标准输出 { stdout } 插件
[root@master ~]# /opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }' Settings: Default filter workers: 1 Logstash startup completed www.baidu.com 2021-06-08T07:36:47.483Z master www.baidu.com www.taobao.com 2021-06-08T07:36:57.405Z master www.taobao.com 验证输出格式化,使用 rubydebug 显示详细信息输出,code为一种编解码 [root@master ~]# /opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{codec => rubydebug} }' Settings: Default filter workers: 1 Logstash startup completed qky123 { "message" => "qky123", "@version" => "1", "@timestamp" => "2021-06-08T07:38:00.924Z", "host" => "master" }
使用logstash将信息写入elasticsearch输入输出对接
[root@master ~]# /opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.254.241:9200"] } }' Settings: Default filter workers: 1 Logstash startup completed www.baidu.com www.taobao.com qky love zyn qky12377321
在slave1上查看elasticsearch网页,成功输出
写入ES和同时生成文本
[root@master ~]# /opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.254.241:9200"] } stdout { codec => rubydebug } }' Settings: Default filter workers: 1 Logstash startup completed nerver start keepalived { "message" => "nerver start keepalived", "@version" => "1", "@timestamp" => "2021-06-08T07:45:05.363Z", "host" => "master" }
测试系统日志能否被采集
[root@master conf.d]# vim /etc/logstash/conf.d/system.conf input { file{ path => "/var/log/messages" type => "system" #系统类型 start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.254.241:9200"] index => "system-%{+YYYY.MM.dd}" } } [root@master ~]# logstash -f /etc/logstash/conf.d/system.conf #指定logstash配置文 件,输出系统日志 重启slave1 [root@slave1 ~]# systemctl restart elasticsearch.service 刷新网页,查看索引数据,成功输出了系统日志
查看索引切片情况
-
在slave1上安装kibana
5.1、安装部署
[root@slave1 ~]# mkdir -p /usr/local/kibana [root@slave1~]#wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz [root@slave1 ~]# tar -zxvf kibana-4.3.1-linux-x64.tar.gz -C /usr/local/kibana/ [root@slave1 ~]# vi /usr/local/kibana/kibana-4.3.1-linux-x64/config/kibana.yml [root@slave1~]#egrep -v "^$|^#" /usr/local/kibana/kibana-4.3.1-linux-x64/config/kibana.yml server.port: 5601 #服务器端口 server.host: "0.0.0.0" #监听地址 elasticsearch.url: "http://192.168.254.241:9200" #和ES建立联系 kibana.index: ".kibana" #建立索引 [root@slave1 ~]# yum install screen -y [root@slave1 ~]# /usr/local/kibana/kibana-4.3.1-linux-x64/bin/kibana #启动监听
5.2、对接system系统日志 访问网页:
Discover里查看日志,图表式显示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210630180005190.png) 5.3、对接Apache日志(master节点)
[root@master ~]# cat /etc/logstash/conf.d/apache-log.conf input { #输入Apache日志 file{ path => "/etc/httpd/logs/access_log" type => "access" start_position => "beginning" } file{ path => "/etc/httpd/logs/error_log" type => "error" start_position => "beginning" } } output { #输出到ES if [type] == "access" { elasticsearch { hosts => ["192.168.254.241:9200"] index => "apache_access.%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.254.241:9200"] index => "apache_error.%{+YYYY.MM.dd}" } } }
#在logstash上输入Apache日志,输出到elasticsearch
[root@master ~]# logstash -f /etc/logstash/conf.d/apache-log.conf #启动脚本
刷新ES网页,查看索引,建议先访问apache页面,否则可能刷新不出来 在kibana创建Apache索引图表