CentOS7 搭建ELK日志分析系统过程
ELK简介
ELK是什么?
elk是三个开源软件的缩写,分别是:Elasticsearch、Logstash、Kibana 。由于Logstash 客户端太占用资源,对服务器的要求比较高,后来FileBeat出现了 ,解决了资源问题,官方也推荐这个工具。
Elasticsearch:实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能
Logstash:日志收集,分析,过滤并转化到对应的存储库
Kibana:一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据
Filebeat:监控日志文件、转发。 需要收集数据的服务器端需要安装这个
架构图
如上图你可以看出来,FileBeat 将数据 通过队列 发给 Logstash ,然后Logstash 在将数据给 Elasticsearch 存储。kibana结合nginx 提供web界面
环境准备
软件名称 | 安装的端 | IP |
elasticsearch | 管理端服务器 | 192.168.0.1 |
Logstash | 管理端服务器 | 192.168.0.1 |
Kibana | 管理端服务器 | 192.168.0.1 |
FileBeat | 日志端服务器 | 192.168.0.2 |
Redis | 管理端服务器 | 192.168.0.1 |
准备工作
设置官方源
## 下载并安装公共签名密钥 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch ## 设置repo内容 vim /etc/yum.repos.d/elasticsearch.repo ## 在repo中添加如下内容 [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
Java环境安装
elasticsearch 需要java环境支持,执行如下命令
## 安装java 环境 yum install java -y ## 验证是否安装好 java -version
Elasticsearch 安装和配置
安装
yum -y install elasticsearch ##设置为自启动 systemctl enable elasticsearch
配置
配置文件路径:/etc/elasticsearch/elasticsearch.yml
核心参数
## 集群名字 cluster.name: app-log ## 节点名字 node.name: node-1 ## 数据存放地址 (mkdir -p /data1/es/data && chown -R elasticsearch:elasticsearch /data1/es/data) path.data: /data1/es/data ## 日志文件地址(可不修改) path.logs: /var/log/elasticsearch
修改启动参数路径:/etc/elasticsearch/jvm.options
##例如修改jvm内存 -Xms4g -Xmx4g
命令介绍
## 启动 service elasticsearch {start|restart|reload} ## 停止 service elasticsearch stop
验证
curl -X GET http://localhost:9200 输出结果如下 { "name" : "node-1", "cluster_name" : "app-log", "cluster_uuid" : "oVk4kUzKTCOsc2zaViOMXA", "version" : { "number" : "6.8.13", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "be13c69", "build_date" : "2020-10-16T09:09:46.555371Z", "build_snapshot" : false, "lucene_version" : "7.7.3", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Logstash 安装
安装
yum -y install logstash ## 自启动 systemctl enable logstash
配置放在后面讲,和FileBeat一起讲更容易理解
Kibana 安装和配置
安装
yum -y install kibana nginx ## 设置自动启 systemctl enable kibana
命令介绍
## 启动 service kibana {start|restart|reload} ## 停止 service kibana stop
nginx 配置
server { listen 80; server_name log.corp.jixuejima.cn; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
效果图
Redis安装和配置
由于我是用的是阿里云redis服务,这个可以直接用
FileBeat 安装和配置
安装
yum -y install filebeat ## 设置自启动 systemctl enable filebeat
配置
配置路径:/etc/filebeat/filebeat.yml
filebeat.inputs: - type: log enabled: true paths: - /xxxx/dispatch.log fields: log_source: jobs output.redis: hosts: ["xxxxxyyyyyzzzz.redis.rds.aliyuncs.com"] port: 6379 db: 2 timeout: 5 key: "logstash_list" processors: - add_host_metadata: ~ - add_cloud_metadata: ~
注解:FileBeat 是转发日志内容到指定的管道对象(这里使用的是阿里云的redis),其中需要注意的是 log_source 这个是我自定义的日志来源,方便后面Logstash进行日志处理。上面的配置就是讲 日志 放到 redis队列中,队列叫做:logstash_list
命令介绍
## 启动 service filebeat {start|restart|reload} ## 停止 service filebeat stop
Logstash 配置
配置
前面说过,关于Logstash的配置放到FileBeat安装之后,这个没有先后顺序,只是方便大家理解 才专门单独放到后面讲解。FileBeat 将 日志放到了redis中。那么Logstash就要从redis中取出数据。
配置路径:/etc/logstash/conf.d/log.conf
input { redis { data_type => "list" key => "logstash_list" host => "xxxxxyyyyyzzzz.redis.rds.aliyuncs.com" port => 6379 db => 2 } } filter { if "cleared" in [message] or "运行时间未到" in [message] or "DEBUG 运行命令" in [message] { ### 丢弃 drop{} } if "yii queue" in [message] and "start" in [message] { drop{} } if "jobs" == [fields][log_source] { grok { match =>{ "message" => "job_id:%{NUMBER:job_id}" } } } mutate { remove_field => ["@version","[beat][name]","[beat][hostname]","[beat][version]","[host][architecture]","[host][containerized]","[host][id]","[host][os][codename]","[host][os][family]","[host][os][name]","[host][os][platform]","[host][os][version]","[meta][cloud][provider]","[prospector][type]","[log][file][path]","[input][type]","[meta][cloud][region]","http_version"] } } output { if "jobs" == [fields][log_source] { elasticsearch { hosts => ["localhost:9200"] index => "jobs-%{+YYYY.MM.dd}" } } }
注解:
上面的input配置的和FileBeat同一个Redis配置,说明从Redis获取数据。
filter 区域表示过滤处理,上面是根据我自己的业务进行日志丢弃(因为有些日志记录是没有意义的)。根据来源进行 数据匹配 然后单独存储更改值( 如下图,将message字段中的job_id 单独提取作为一个字段 )
filter 中的 mutate 配置了删除一些字段,有些字段都一样,存在没意义,减少存储日志量
output 配置中 判断来源,然后设置存储在Elasticsearch 中并且索引规则按照定义好的生成(如下图)
命令介绍
## 启动 service logstash {start|restart|reload} ## 停止 service logstash stop
技巧
Kibana界面设置成中文?
配置路径:/etc/kibana/kibana.yml
## 改成如下 然后重启Kibana i18n.locale: "zh-CN"