ELK日志收集
Elasticsearch: 数据库,存储数据 java
logstash: 日志收集,过滤数据 java
kibana: 分析,过滤,展示 java
filebeat: 收集日志,传输到ES或logstash go
filebeat官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
所需环境:
efk(内存4G) | 192.168.1.128 |
---|---|
ceshiji(可有可无) | 192.168.1.129 |
先提前同步时间:
ntpdate time1.aliyun.com #同步阿里云时间
准备所需要的软件:
下载地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/6.x/yum/6.6.0/ #推荐下载到本地后上传
elasticsearch-6.6.0.rpm
filebeat-6.6.0-x86_64.rpm
kibana-6.6.0-x86_64.rpm
logstash-6.6.0.rpm
[root@efk ~]# mkdir /data/soft -p
[root@efk ~]# cd /data/soft
复制群集所需rpm包到/data/soft目录下
[root@efk soft]# ls
elasticsearch-6.6.0.rpm filebeat-6.6.0-x86_64.rpm kibana-6.6.0-x86_64.rpm logstash-6.6.0.rpm
一、安装es主机:192.168.1.128
1、安装elasticsearch:
前提:安装jdk-1.8.0或以上版本——跳转安装jdk-1.8.0
[root@efk ~]# cd /data/soft/
[root@efk soft]# rpm -ivh elasticsearch-6.6.0.rpm
2、修改配置文件:
[root@efk soft]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-1
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 192.168.1.128,127.0.0.1
http.port: 9200
3、创建数据目录,并修改权限
[root@efk soft]# mkdir -p /data/elasticsearch
[root@efk soft]# chown -R elasticsearch.elasticsearch /data/elasticsearch/
4、分配锁定内存:
[root@efk soft]# vim /etc/elasticsearch/jvm.options
-Xms1g #分配最小内存
-Xmx1g #分配最大内存,官方推荐为物理内存的一半,但最大为32G
5、修改锁定内存后,无法重启,解决方法如下:
[root@efk soft]# systemctl edit elasticsearch
#添加:
[Service]
LimitMEMLOCK=infinity
(F2)或(ctrl+x)保存退出——>y——>Enter
[root@efk soft]# systemctl daemon-reload
[root@efk soft]# systemctl restart elasticsearch
[root@efk soft]# netstat -anpt | grep 9200
tcp6 0 0 192.168.1.128:9200 :::* LISTEN 3875/java
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 3875/java
二、在es主机上安装kibana
1、安装kibana
[root@efk soft]# rpm -ivh kibana-6.6.0-x86_64.rpm
2、修改配置文件
[root@efk soft]# vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "192.168.1.128"
server.name: "efk" #自己所在主机的主机名
elasticsearch.hosts: ["http://192.168.1.128:9200"] #es服务器的ip,便于接收日志数据
3、启动kibana
[root@efk soft]# systemctl start kibana
[root@efk soft]# netstat -anpt | grep 5601
tcp 0 0 192.168.1.128:5601 0.0.0.0:* LISTEN 4085/node
三、在es主机上安装filebeat
1、安装filebeat
[root@efk soft]# rpm -ivh filebeat-6.6.0-x86_64.rpm
2、修改配置文件
[root@efk soft]# vim /etc/filebeat/filebeat.yml
#修改
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
output.elasticsearch:
hosts: ["192.168.1.128:9200"]
3、启动filebeat
[root@efk soft]# systemctl start filebeat
验证启动是否成功使用命令:systemctl status filebeat
四、在es主机安装nginx、httpd-tools
1、配置yum源,安装nginx、httpd-tools
[root@efk soft]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #配置aliyunyum源
[root@efk soft]# yum -y install nginx httpd-tools #安装nginx、httpd-tools
2、启动nginx
[root@efk soft]# systemctl start nginx
3、使用ab压力测试工具测试访问
[root@efk soft]# ab -n 100 -c 20 http://192.168.1.128/
[root@efk soft]# cat /var/log/nginx/access.log | wc -l
100
五、!!!重点提示!!!下边实验过程中如有在浏览器Elasticsearch中刷新不出数据,好好检查你的filebeat配置文件(重点:语法错误!小心空格!)
4、在es浏览器查看filebeat索引和数据
5、在kibana添加索引
management——Index Patterns——create index pattern——Discover——右上角——选择today
注意:这里先点create index pattern在执行下面的操作
6、修改nginx的日志格式为json
[root@efk soft]# 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@efk soft]# systemctl restart nginx
7、修改filebeat配置文件
[root@efk soft]# 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.1.128:9200"]
index: "nginx-%{[beat.version]}-%{+yyyy.MM.dd}"
setup.template.name: "nginx"
setup.template.patten: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
[root@efk soft]# systemctl restart filebeat
清除之前的记录:
[root@efk soft]# vim /var/log/nginx/access.log #清空日志
[root@efk soft]# systemctl restart nginx
[root@efk soft]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
[root@efk soft]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
[root@efk soft]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
[root@efk soft]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
[root@ceshiji ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #安装aliyun扩展源
[root@ceshiji ~]# yum -y install httpd-tools
[root@ceshiji ~]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
[root@ceshiji ~]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
查看验证索引日志
8、配置access.log和error.log分开
[root@efk soft]# 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.1.128:9200"]
#index: "nginx-%{[beat.version]}-%{+yyyy.MM}"
indices:
- index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}"
when.contains:
tags: "access"
- index: "nginx-error-%{[beat.version]}-%{+yyyy.MM}"
when.contains:
tags: "error"
setup.template.name: "nginx"
setup.template.patten: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
[root@efk soft]# systemctl restart filebeat #重启服务
清除之前的记录:
[root@efk soft]# vim /var/log/nginx/access.log #清空日志
[root@efk soft]# systemctl restart nginx
[root@efk soft]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
[root@efk soft]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
[root@efk soft]# ab -n 100 -c 20 http://192.168.1.128/ #ab测试访问,生成json格式日志
[root@efk soft]# vim /etc/nginx/nginx.conf #制造错误日志
ttp {……}
[root@efk soft]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
[root@efk soft]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
[root@efk soft]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
[root@efk soft]# vim /etc/nginx/nginx.conf #更改回来
http {……}
[root@efk soft]# systemctl restart nginx
[root@efk soft]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 43975/nginx: master
tcp6 0 0 :::80 :::* LISTEN 43975/nginx: master
查看access、error日志
查看access日志
查看error日志
|
|
|
|
|
|
|
|
|
↓
如若想继续深入了解efk连接跳转——efk——3——filebeat+redis+logstash+es+kibana架构