
- node.name: es1
- path.data: /data/elasticsearch
- path.logs: /var/log/elasticsearch
- bootstrap.memory_lock: true
- network.host: 192.168.8.8,127.0.0.1
- http.port: 9200
- mkdir -p /data/elasticsearch
- chown -R elasticsearch.elasticsearch /data/elasticsearch/
- server.port: 5601
- server.host: "192.168.8.8"
- server.name: "db01" #自己所在主机的主机名
- elasticsearch.hosts: ["http://192.168.8.8:9200"] #es服务器的ip,便于接收日志数据
- 保存退出
- filebeat.inputs: (日志来源)
- - type: log (日志格式)
- enabled: true (开机自启)
- paths: (日志路径)
- - /var/log/nginx/access.log
-
- output.elasticsearch: (日志传送到那)
- hosts: ["192.168.8.8:9200"]
启动filebeat服务:
systemctl start filebeat
yum -y install nginx
启动nginx:nginx
在8.8服务器上安装网站压力测试工具:
yum -y install httpd-tools
2.使用ab压力测试工具测试访问
ab -c 1000 -n 20000 http://192.168.8.9/
-c(并发数) -n(请求数)
使用浏览器扩展程序登录es查看索引是否有访问数:

修改nginx的日志个数为json:
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;
重启服务:systemctl restart nginx
修改filebeat.yml文件,区分nginx的访问日志和错误日志
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.8:9200"]
- indices:
- - index: "nginx-access-%{+yyyy.MM.dd}"
- when.contains:
- tags: "access"
- - index: "nginx-error-%{+yyyy.MM.dd}"
- when.contains:
- tags: "error"
-
- setup.template.name: "nginx"
- setup.template.patten: "nginx-*"
- setup.template.enabled: false
- setup.template.overwrite: true
重启服务:systemctl restart filebeat
使用ab工具压力测试一下网站:
测试访问数据:ab -c 1000 -n 20000 http://192.168.8.9/
测试错误数据:ab -c 1000 -n 20000 http://192.168.8.9/444.html
可以看到es收集到了两个索引:

使用kibana图形化展示日志访问数据:
创建索引,图形化展示:





按照此步骤 将error错误索引页创建一下即可
虽然以上环境也可以进行日志收集,但只适用于中小型公司,以下再多增加一台服务器,安装redis实现消息队列,和logstash日志采集,增加吞吐量。
在8.10服务器上部署redis和logstash:
准备安装目录和数据目录:
- mkdir -p /data/soft
- mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}
下载redis安装包:
- cd /data/soft
- wget http://download.redis.io/releases/redis-5.0.7.tar.gz
将软件包解压到/opt/redis_cluster文件夹中:
- tar xf redis-5.0.7.tar.gz -C /opt/redis_cluster/
- ln -s /opt/redis_cluster/redis-5.0.7 /opt/redis_cluster/redis
切换目录编译安装redis:
- cd /opt/redis_cluster/redis
- make && make install
编写redis配置文件:
vim /opt/redis_cluster/redis_6379/conf/6379.conf
- bind 127.0.0.1 192.168.8.10
- port 6379
- daemonize yes
- pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
- logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
- databases 16
- dbfilename redis.rdb
- dir /opt/redis_cluster/redis_6379
启动redis服务:redis-server /opt/redis_cluster/redis_6379/conf/6379.conf
修改8.9的filebeat文件(将filebeat收集的日志转发给redis):
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"]
-
- setup.template.settings:
- index.number_of_shards: 3
-
- setup.kibana:
-
- output.redis:
- hosts: ["192.168.8.10"]
- key: "filebeat"
- db: 0
- timeout: 5

- input {
- redis {
- host => "192.168.8.10"
- port => "6379"
- db => "0"
- key => "filebeat"
- data_type => "list"
- }
- }
-
- filter {
- mutate {
- convert => ["upstream_time","float"]
- convert => ["request_time","float"]
- }
- }
-
- output {
- stdout {}
- if "access" in [tags] {
- elasticsearch {
- hosts => ["http://192.168.8.8:9200"]
- index => "nginx_access-%{+YYYY.MM.dd}"
- manage_template => false
- }
- }
- if "error" in [tags] {
- elasticsearch {
- hosts => ["http://192.168.8.8:9200"]
- index => "nginx_error-%{+YYYY.MM.dd}"
- manage_template => false
- }
- }
- }
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf
过程需等待,启动较慢(大约2-3分钟)
最后通过kibana图形化界面,可以看到nginx的access日志和error错误日志即可,最终效果和仅部署elk效果一致,只不过添加了redis数据库和filebeat日志收集工具,有了redis可以实现了消息队列为es服务器减轻了压力。