ELK日志(3)
原创EFK日志收集
Elasticsearch: 数据库,存储数据 java
logstash: 日志收集,过滤数据 java
kibana: 分析,过滤,展示 java
filebeat: 收集日志,传输到ES或logstash go
redis:缓冲数据,等待logstash取数据
filebeat官方文档:
https://www.elastic.co/guide/en/beats/filebeat/current/index.html
拓扑图如下:
主机名
IP
服务
内存
es
192.168.8.1
elasticsearch
kibana
redis
logstash
4G
web
192.168.8.2
filebeat
nginx
2G
client
192.168.8.3
httpd-tools
1G
es主机
elasticsearch
- 安装elasticsearch
前提:jdk-1.8.0
[root@es ~]# rpm -ivh /media/elk-6.6/elasticsearch-6.6.0.rpm
-
修改配置文件
[root@es ~]# vim /etc/elasticsearch/elasticsearch.yml node.name: es
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 192.168.8.1,127.0.0.1
http.port: 92002 -
创建数据目录,并修改权限
[root@es ~]# mkdir -p /data/elasticsearch [root@es ~]# chown -R elasticsearch.elasticsearch /data/elasticsearch/
-
分配锁定内存:
实验环境中保持默认即可。
[root@es ~]# vim /etc/elasticsearch/jvm.options
-Xms1g #分配最小内存
-Xmx1g #分配最大内存,官方推荐为物理内存的一半,但最大为32G
-
修改锁定内存后,无法重启,解决方法如下:
[root@es ~]# systemctl edit elasticsearch 添加: [Service] LimitMEMLOCK=infinity F2保存退出 [root@es ~]# systemctl daemon-reload [root@es ~]# systemctl restart elasticsearch
kibana
-
安装kibana
[root@es ~]# rpm -ivh /media/elk-6.6/kibana-6.6.0-x86_64.rpm
-
修改配置文件
[root@es ~]# vim /etc/kibana/kibana.yml server.port: 5601 server.host: "192.168.8.1" server.name: "es" #自己所在主机的主机名 elasticsearch.hosts: ["http://192.168.8.1:9200"] #es服务器的ip,便于接收日志数据
-
启动kibana
[root@es ~]# systemctl start kibana
web主机
filebeat
-
安装filebeat
[root@web ~]# rpm -ivh /media/elk-6.6/filebeat-6.6.0-x86_64.rpm
-
修改配置文件
[root@web ~]# vim /etc/filebeat/filebeat.yml 删除所有并添加如下: filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
output.elasticsearch: hosts: ["192.168.8.1:9200"]
- type: log
enabled: true
paths:
-
启动filebeat
[root@web ~]# systemctl start filebeat
nginx
-
安装nginx
[root@web ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force
-
启动nginx
[root@web ~]# systemctl start nginx
-
es使用ab压力测试工具测试web网站
[root@es ~]# ab -n 100 -c 20 http://192.168.8.2/index.html
-
浏览器查看filebeat索引和数据
点击插件访问,添加插件方法在 ELK(1) 。
- 在kibana添加索引
management→Index Patterns→create index pattern→复制索引名称到上方→Next step→timestamp→create。
点击discover查看。
- 修改nginx的日志格式为json
初始状态是使用的YML的格式,下面可以改为json的格式。
[root@web ~]# vim /etc/nginx/nginx.conf
注意
删除上图中红框内的文件,把下面内容复制在http {}内
log_format log_json { "@timestamp": "$time_local",
"remote_addr": "$remote_addr",
"referer": "$http_referer",
"request": "$request",
"status": $status,
"bytes": $body_bytes_sent,
"agent": "$http_user_agent",
"x_forwarded": "$http_x_forwarded_for",
"up_addr": "$upstream_addr",
"up_host": "$upstream_http_host",
"up_resp_time": "$upstream_response_time",
"request_time": "$request_time"
};
access_log /var/log/nginx/access.log log_json;
[root@web ~]# systemctl restart nginx
查看未修改前的格式
[root@web ~]# cat /var/log/nginx/access.log
清空日志:[root@web ~]# > /var/log/nginx/access.log
es主机:[root@es ~]# ab -n 100 -c 20 http://192.168.8.2/index.html
继续使用ab测试访问,生成json格式日志,查看格式已经修改成功。
[root@web ~]# cat /var/log/nginx/access.log
- 修改filebeat配置文件
修改配置文件添加nginx索引
[root@web ~]# vim /etc/filebeat/filebeat.yml
修改为:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.overwrite_keys: true
output.elasticsearch:
hosts: ["192.168.8.1:9200"]
index: "nginx-%{[beat.version]}-%{+yyyy.MM}"
setup.template.name: "nginx"
setup.template.patten: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
[root@web ~]# systemctl restart filebeat
先访问nginx网站后,查看elasticsearch就可以看到nginx的日志索引了。
- 配置access.log和error.log分开
下面配置把access和error分开,分别通过正确访问和错误访问后,就可以看到两个索引。
[root@web ~]# vim /etc/filebeat/filebeat.yml
修改为:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.overwrite_keys: true
tags: ["access"]
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
tags: ["error"]
output.elasticsearch:
hosts: ["192.168.8.1:9200"]
indices:
- index: "nginx-access-%{+yyyy.MM}"
when.contains:
tags: "access"
- index: "nginx-error-%{+yyyy.MM}"
when.contains:
tags: "error"
setup.template.name: "nginx"
setup.template.patten: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
[root@web ~]# systemctl restart filebeat
下面访问nginx服务器,分别使用正确和错误的访问方式web网站,就可以看到elasticsearch中的两个日志索引了。
json.keys_under_root: true #将json数据拆解字段后,可以让字段解析到顶级结构下。
json.overwrite_keys: true #对于同名的 key,会覆盖原有 key 值。
==============================================================
kibana图表
注意:相同的方法添加access索引。
登录→左侧面板选择visualize→点击“+”号→选择所需的图表类型→选择access索引→Buckets→x-Axis→Aggregation(选择Terms)→Field(remote_addr.keyword:表示查看前10条地址信息)→size(5)→点击上方三角标志。
目前成功访问的记录只有本机浏览器访问过,现在用client客户端访问nginx网站后再次查看图表。
kibana监控(x-pack):
登录→左侧面板选择→Monitoring→启用监控。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除