ELK日志分析系统
文章目录
- ELK日志分析系统
- 一、ELK日志分析系统简介
- 二、Elasticsearch介绍
- 三、Logstash介绍
- 四、Kibana介绍
- 五、部署ELK日志分析系统
- 配置Elasticsearch环境(node1、node2)
- 安装部署Elasticsearch(node1、node2)
- 查看节点信息 使用真机浏览器打开20.0.0.10:9200、20.0.0.20:9200会显示(node1、node2)
- 集群检查健康与状态(node1、node2)
- 安装node组件依赖包(node1、node2)
- 安装phantomjs前端框架(node1、node2)
- 安装Elasticsearch-head数据可视化工具(node1、node2)
- 修改Elasticsearch主配置文件(node1、node2)
- 启动Elasticsearch-head 启动服务器(node1、node2)
- 真机浏览器输入20.0.0.10:9100、20.0.0.20:9100 可以看到群集健康状态是绿色的
- 安装logstash(logstash-apache)
- 安装kibana(kibana)
- 对接apache日志文件
一、ELK日志分析系统简介
-
日志服务器
- 提高安全性
- 集中存放日志
- 缺陷
- 对日志的分析困难
-
ELK日志分析系统
- Elasticsearch
- Logstash
- Kibana
-
日志处理步骤
- 将日志进行集中化管理
- 将日志格式化(Logstash)并输出到Elasticsearch
- 对格式化后的数据进行索引和存储(Elasticsearch)
- 前端数据的展示(Kibana)
二、Elasticsearch介绍
三、Logstash介绍
-
Logstash介绍
- 一款强大的数据处理工具
- 可实现数据传输、格式处理、格式化输出
- 数据输入、数据加工(如过滤,改写等)以及数据输出
-
Logstash主要组件
- Shipper
- Indexer
- Broker
- Search and Storage
- Web Interface
四、Kibana介绍
-
Kibana介绍
- 一个针对ELasticsearch的开源分析及可视化平台
- 搜索、查看存储在Elasticsearch索引中的数据
- 通过各种图表进行高级数据分析及展示
-
Kibana主要功能
- Elasticsearch无缝之集成
- 整合数据,复杂数据分析
- 让更多团队成员受益
- 接口灵活,分享更容易
- 配置简单,可视化多数据源
- 简单数据导出
五、部署ELK日志分析系统
-
实验环境
phantomjs-2.1.1-linux-x86_64.tar.bz2
20.0.0.10 部署Elasticsearch---node1 '//存储数据及索引' 20.0.0.20 部署Elasticsearch---node2 '//存储数据及索引' 20.0.0.30 部署logstash '//收集日志及格式化' 20.0.0.40 部署kibana '//视图显示'
-
实验步骤
-
配置Elasticsearch环境(node1、node2)
#20.0.0.10 hostnamectl set-hostname node1 vim /etc/hosts 20.0.0.10 node1 20.0.0.20 node2 java -version '//查看java版本' setenforce 0 systemctl stop firewalld #20.0.0.20 hostnamectl set-hostname node2 vim /etc/hosts 20.0.0.10 node1 20.0.0.20 node2 java -version '//查看java版本' setenforce 0 systemctl stop firewalld
-
安装部署Elasticsearch(node1、node2)
#两个节点相同的安装步骤 elasticsearch-5.5.0.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 elasticsearch-head.tar.gz node-v8.2.1.tar.gz 将四个需要用到的包导入/opt/目录下 #安装Elasticsearch.rpm包 rpm -ivh elasticsearch-5.5.0.rpm #加载系统服务 systemctl daemon-reload systemctl enable elasticsearch.service #修改ELasticsearch配置文件 cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak '//复制一份备份文件' vim /etc/elasticsearch/elasticsearch.yml 17//cluster.name: my-elk-cluster '//集群名字---需相同' 23//node.name: node1 '//节点名字---跟主机名相同' 33//path.data: /data/elk_data '//数据存放位置' 37//path.logs: /var/log/elasticsearch/ '//日志存放路径' 43//bootstrap.memory_lock: false '//不在启动的时候锁定内存' 55//network.host: 0.0.0.0 '//提供服务绑定的IP地址,0.0.0.0代表所有地址' 59//http.port: 9200 '//监听端口为9200' 68//discovery.zen.ping.unicast.hosts: ["node1", "node2"] '//集群发现通过单播实现' #创建数据存放路径并授权 mkdir -p /data/elk_data chown elasticsearch.elasticsearch /data/elk_data/ #启动并查看elasticsearch是否成功开启 systemctl start elasticsearch.service netstat -ntap | grep 9200
-
查看节点信息 使用真机浏览器打开20.0.0.10:9200、20.0.0.20:9200会显示(node1、node2)
#20.0.0.10:9200 { "name" : "node1", "cluster_name" : "my-elk-cluster", "cluster_uuid" : "cx1Xb3tzRp2WMn0wrSg-iQ", "version" : { "number" : "5.5.0", "build_hash" : "260387d", "build_date" : "2017-06-30T23:16:05.735Z", "build_snapshot" : false, "lucene_version" : "6.6.0" }, "tagline" : "You Know, for Search" } #20.0.0.20:9200 ...
-
集群检查健康与状态(node1、node2)
#查看健康20.0.0.10:9200/_cluster/health?pretty { "cluster_name" : "my-elk-cluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 } #查看健康20.0.0.20:9200/_cluster/health?pretty ... #查看状态20.0.0.10:9200/_cluster/status?pretty { "error" : { "root_cause" : [ { "type" : "illegal_argument_exception", "reason" : "No endpoint or operation is available at [status]" } ], "type" : "illegal_argument_exception", "reason" : "No endpoint or operation is available at [status]" }, "status" : 400 } #查看状态20.0.0.20:9200/_cluster/status?pretty ...
-
安装node组件依赖包(node1、node2)
cd /opt yum -y install gcc gcc-c++ tar zxvf node-v8.2.1.tar.gz cd node-v8.2.1/ ./configure make -j3 make install
-
安装phantomjs前端框架(node1、node2)
cd /opt tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin cp phantomjs /usr/local/bin
-
安装Elasticsearch-head数据可视化工具(node1、node2)
cd /opt tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/ cd /usr/local/src/elasticsearch-head/ npm install
-
修改Elasticsearch主配置文件(node1、node2)
vim /etc/elasticsearch/elasticsearch.yml ... http.cors.enabled: true '//开启跨域访问支持,默认为false' http.cors.allow-origin: "*" '//跨域访问允许的域名地址' systemctl restart elasticsearch
-
启动Elasticsearch-head 启动服务器(node1、node2)
cd /usr/local/src/elasticsearch-head/ npm run start & '//切换到后台运行' netstat -antp | grep 9200 netstat -antp | grep 9100
-
真机浏览器输入20.0.0.10:9100、20.0.0.20:9100 可以看到群集健康状态是绿色的
在Elasticsearch中输入http://20.0.0.10:9100/ 点击连接 在Elasticsearch中输入http://20.0.0.20:9100/ 点击连接
#新建索引
-
```shell
#20.0.0.10
#插入一个数据进行测试
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type:application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
```
-
安装logstash(logstash-apache)
#关闭防火墙与核心防护 setenforce 0 systemctl stop firewalld #更改主机名 hostnamectl set-hostname logstash-apache #安装Apache服务(httpd) yum -y install httpd systemctl start httpd #安装Java环境 java -version '//没有安装需要yum -y install java' #安装logstash #上传软件包到/opt/目录下 rpm -ivh logstash-5.5.1.rpm '//安装logstash' systemctl start logstash.service '//启动logstash' systemctl enable logstash.service '//设置开启自启' ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ '//建立软连接' #logstash(apache)与elasticsearch(node)功能是否正常,做对接测试 #logstash这个命令测试 #字段描述 # -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash # -e 后面跟着字符串该字符串可以被当作logstash的配置(如果是" ",则默认使用stdin作为输入,stdout作为输出) # -t 测试配置文件是否正确,然后退出 #在apache服务器上---输入采用标准输入 输出采用标准输出 logstash -e 'input { stdin {} } output { stdout {} }' ... www.test.com 2020-09-15T09:40:41.042Z logstash-apache www.test.com #使用rubydebug显示详细输出,codec为一种编解码器 logstash -e 'input { stdin {} } output { stdout { codec=>rubydebug } }' ... www.test.com { "@timestamp" => 2020-09-15T10:26:11.142Z, "@version" => "1", "host" => "logstash-apache", "message" => "www.test.com" } #使用logstash将信息写入elasticsearch中---输入输出对接 logstash -e 'input { stdin {} } output { elasticsearch { hosts=>["主节点IP地址:9200"] } }' ... www.test.com '//浏览器里面输入:"主节点IP:9100"会显示www.test.com' #logstash-apache主节做对接配置 =======================logstash配置文件===================== logstash配置文件主要由三部分组成:input、output、filter(根据需求) chmod o+r /var/log/messages ll /var/log/messages vim /etc/logstash/conf.d/system.conf input { file{ path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch{ hosts => ["20.0.0.20:9200"] index => "system-%{+YYYY.MM.dd}" } } systemctl restart logstash.service '//浏览器输入"主节点IP:9100"查看信息"/var/log/messages'
-
安装kibana(kibana)
#安装kibana #上传软件包到/opt/目录下 setenforce 0 systemctl stop firewalld hostnamectl set-hostname kibana rpm -ivh kibana-5.5.1-x86_64.rpm '//安装rpm包' cd /etc/kibana/ cp -p kibana.yml kibana.yml.bak '//备份' vim /etc/kibana/kibana.yml 2//server.port: 5601 '//打开kibana端口' 7//server.host: "0.0.0.0" '//kibana监听地址---监听所有' 21//elasticsearch.url: "http://主节点IP:9200" '//与elasticsearch建立连接' 30//kibana.index: ".kibana" '//在elasticsearch中添加.kibana索引---测试使用' systemctl start kibana.service '//启动kibana服务' systemctl enable kibana.service '//设置开机自启' '//可以访问20.0.0.40:5601进行查看视图'
-
对接apache日志文件
#logstash-apache cd /etc/logstash/conf.d vim apache_log.conf input { 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 { if [type] == "access" { elasticsearch{ hosts => ["20.0.0.20:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch{ hosts => ["20.0.0.20:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } } /usr/share/logstash/bin/logstash -f apache_log.conf '//重启服务也可以'