ELFK的组成:
-
- Elasticsearch: 它是一个分布式的搜索和分析引擎,它可以用来存储和索引大量的日志数据,并提供强大的搜索和分析功能。 (java语言开发,)
- logstash: 是一个用于日志收集,处理和传输的工具,它可以从各种数据源收集日志数据,对数据进行处理和过滤,将数据发送到Elasticsearch。 java
- kibana: 是一个用于数据可视化和分析的工具,它可以与Elasticsearch集成,帮助用户通过图表、仪表盘等方式直观地展示和分析日志数据。 java
- filebeat: 轻量级日志收集工具,一般安装在客户端服务器上负责收集日志,传输到ES或logstash go
本章实验环境拓扑图:
-
版本介绍:
- Elasticsearch:6.6.0
- kibana:6.6.0
- filebeat:6.6.0
- nginx:1.18.0
- Redis:5.0.7
- logstash:6.6.0
-
开始部署:
-
部署8.8服务器的es和Kibna:a
- 复制软件包至服务器下安装:
-
rpm -ivh elasticsearch-6.6.0.rpm
-
修改配置文件:
-
vim /etc/elasticsearch/elasticsearch.yml
*bashnode.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
-
-
创建数据目录,并修改权限
*bashmkdir -p /data/elasticsearch chown -R elasticsearch.elasticsearch /data/elasticsearch/
-
启动es:systemctl start elasticsearch
-
- 部署安装kibana:
-
安装kibana:rpm -ivh kibana-6.6.0-x86_64.rpm
-
修改配置文件:
-
修改项:
*bashserver.port: 5601 server.host: "192.168.8.8" server.name: "db01" #自己所在主机的主机名 elasticsearch.hosts: ["http://192.168.8.8:9200"] #es服务器的ip,便于接收日志数据 保存退出
-
-
启动kibana:systemctl start kibana
-
查看两个服务的端口是否存在:
- netstat -anpt | grep 5601
- netstat -anpt | grep 9200
-
- 复制软件包至服务器下安装:
-
部署8.9服务器山的nginx和filebeat:
-
安装filebeat:
- rpm -ivh filebeat-6.6.0-x86_64.rpm
-
修改配置文件:
-
vim /etc/filebeat/filebeat.yml (清空源内容,直接覆盖)
*bashfilebeat.inputs: (日志来源) - type: log (日志格式) enabled: true (开机自启) paths: (日志路径) - /var/log/nginx/access.log output.elasticsearch: (日志传送到那) hosts: ["192.168.8.8:9200"]
-
启动filebeat服务:
- systemctl start filebeat
-
-
安装nginx:
-
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{}内:
bashlog_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
bash修改为: 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:
-
准备安装目录和数据目录:
bashmkdir -p /data/soft mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}
-
下载redis安装包:
bashcd /data/soft wget http://download.redis.io/releases/redis-5.0.7.tar.gz
-
将软件包解压到/opt/redis_cluster文件夹中:
bashtar 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:
bashcd /opt/redis_cluster/redis make && make install
-
编写redis配置文件:
-
vim /opt/redis_cluster/redis_6379/conf/6379.conf
bashbind 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
bashfilebeat.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
-
重启服务:systemctl restart filebeat
-
再次在8.8上使用压力测试工具访问网站:ab -c 1000 -n 20000 http://192.168.8.9/
-
登录redis数据库:redis-cli
- 查看是否有以filebeat命名的键:
- filebeat与redis关联成功!
- 查看是否有以filebeat命名的键:
-
-
-
继续在8.10服务器上部署logstash:
-
rpm -ivh logstash-6.6.0.rpm
-
修改logstash配置文件,实现access和error日志分离
-
vim /etc/logstash/conf.d/redis.conf
*bashinput { 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 } } }
-
最后重启logstash:
*bash/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf
-
过程需等待,启动较慢(大约2-3分钟)
-
-
最后通过kibana图形化界面,可以看到nginx的access日志和error错误日志即可,最终效果和仅部署elk效果一致,只不过添加了redis数据库和filebeat日志收集工具,有了redis可以实现了消息队列为es服务器减轻了压力。
-