• ELFK 分布式日志收集系统


    • 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
                  1. node.name: es1
                  2. path.data: /data/elasticsearch
                  3. path.logs: /var/log/elasticsearch
                  4. bootstrap.memory_lock: true
                  5. network.host: 192.168.8.8,127.0.0.1
                  6. http.port: 9200

            • 创建数据目录,并修改权限
                1. mkdir -p /data/elasticsearch
                2. chown -R elasticsearch.elasticsearch /data/elasticsearch/

            • 启动es:systemctl start elasticsearch
          • 部署安装kibana:
            • 安装kibana:rpm -ivh kibana-6.6.0-x86_64.rpm 
            • 修改配置文件:
              • 修改项:
                  1. server.port: 5601
                  2. server.host: "192.168.8.8"
                  3. server.name: "db01" #自己所在主机的主机名
                  4. elasticsearch.hosts: ["http://192.168.8.8:9200"] #es服务器的ip,便于接收日志数据
                  5. 保存退出

            • 启动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 (清空源内容,直接覆盖)
                1. filebeat.inputs: (日志来源)
                2. - type: log (日志格式)
                3. enabled: true (开机自启)
                4. paths: (日志路径)
                5. - /var/log/nginx/access.log
                6. output.elasticsearch: (日志传送到那)
                7. hosts: ["192.168.8.8:9200"]

            • 启动filebeat服务:

              • systemctl start filebeat

          • 安装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{}内:

            1. log_format log_json '{ "@timestamp": "$time_local", '
            2. '"remote_addr": "$remote_addr", '
            3. '"referer": "$http_referer", '
            4. '"request": "$request", '
            5. '"status": $status, '
            6. '"bytes": $body_bytes_sent, '
            7. '"agent": "$http_user_agent", '
            8. '"x_forwarded": "$http_x_forwarded_for", '
            9. '"up_addr": "$upstream_addr",'
            10. '"up_host": "$upstream_http_host",'
            11. '"up_resp_time": "$upstream_response_time",'
            12. '"request_time": "$request_time"'
            13. ' }';
            14. access_log /var/log/nginx/access.log log_json;

        • 重启服务:systemctl restart nginx

      • 修改filebeat.yml文件,区分nginx的访问日志和错误日志

        • vim /etc/filebeat/filebeat.yml

            1. 修改为:
            2. filebeat.inputs:
            3. - type: log
            4. enabled: true
            5. paths:
            6. - /var/log/nginx/access.log
            7. json.keys_under_root: true
            8. json.overwrite_keys: true
            9. tags: ["access"]
            10. - type: log
            11. enabled: true
            12. paths:
            13. - /var/log/nginx/error.log
            14. tags: ["error"]
            15. output.elasticsearch:
            16. hosts: ["192.168.8.8:9200"]
            17. indices:
            18. - index: "nginx-access-%{+yyyy.MM.dd}"
            19. when.contains:
            20. tags: "access"
            21. - index: "nginx-error-%{+yyyy.MM.dd}"
            22. when.contains:
            23. tags: "error"
            24. setup.template.name: "nginx"
            25. setup.template.patten: "nginx-*"
            26. setup.template.enabled: false
            27. 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图形化展示日志访问数据:

      • 虽然以上环境也可以进行日志收集,但只适用于中小型公司,以下再多增加一台服务器,安装redis实现消息队列,和logstash日志采集,增加吞吐量。

      • 在8.10服务器上部署redis和logstash:

        • 准备安装目录和数据目录:

            1. mkdir -p /data/soft
            2. mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}

        • 下载redis安装包:

            1. cd /data/soft
            2. wget http://download.redis.io/releases/redis-5.0.7.tar.gz

        • 将软件包解压到/opt/redis_cluster文件夹中:

            1. tar xf redis-5.0.7.tar.gz -C /opt/redis_cluster/
            2. ln -s /opt/redis_cluster/redis-5.0.7 /opt/redis_cluster/redis

        • 切换目录编译安装redis:

            1. cd /opt/redis_cluster/redis
            2. make && make install

        • 编写redis配置文件:

          • vim /opt/redis_cluster/redis_6379/conf/6379.conf

              1. bind 127.0.0.1 192.168.8.10
              2. port 6379
              3. daemonize yes
              4. pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
              5. logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
              6. databases 16
              7. dbfilename redis.rdb
              8. 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

              1. filebeat.inputs:
              2. - type: log
              3. enabled: true
              4. paths:
              5. - /var/log/nginx/access.log
              6. json.keys_under_root: true
              7. json.overwrite_keys: true
              8. tags: ["access"]
              9. - type: log
              10. enabled: true
              11. paths:
              12. - /var/log/nginx/error.log
              13. tags: ["error"]
              14. setup.template.settings:
              15. index.number_of_shards: 3
              16. setup.kibana:
              17. output.redis:
              18. hosts: ["192.168.8.10"]
              19. key: "filebeat"
              20. db: 0
              21. timeout: 5

          • 重启服务:systemctl restart filebeat
          • 再次在8.8上使用压力测试工具访问网站:ab -c 1000 -n 20000 http://192.168.8.9/
          • 登录redis数据库:redis-cli
            • 查看是否有以filebeat命名的键:
            • filebeat与redis关联成功!
      • 继续在8.10服务器上部署logstash:
        • rpm -ivh logstash-6.6.0.rpm 
        • 修改logstash配置文件,实现access和error日志分离
          • vim /etc/logstash/conf.d/redis.conf
              1. input {
              2. redis {
              3. host => "192.168.8.10"
              4. port => "6379"
              5. db => "0"
              6. key => "filebeat"
              7. data_type => "list"
              8. }
              9. }
              10. filter {
              11. mutate {
              12. convert => ["upstream_time","float"]
              13. convert => ["request_time","float"]
              14. }
              15. }
              16. output {
              17. stdout {}
              18. if "access" in [tags] {
              19. elasticsearch {
              20. hosts => ["http://192.168.8.8:9200"]
              21. index => "nginx_access-%{+YYYY.MM.dd}"
              22. manage_template => false
              23. }
              24. }
              25. if "error" in [tags] {
              26. elasticsearch {
              27. hosts => ["http://192.168.8.8:9200"]
              28. index => "nginx_error-%{+YYYY.MM.dd}"
              29. manage_template => false
              30. }
              31. }
              32. }

          • 最后重启logstash:
            • /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf
              

          • 过程需等待,启动较慢(大约2-3分钟)

        • 最后通过kibana图形化界面,可以看到nginx的access日志和error错误日志即可,最终效果和仅部署elk效果一致,只不过添加了redis数据库和filebeat日志收集工具,有了redis可以实现了消息队列为es服务器减轻了压力。

  • 相关阅读:
    验证了一遍CVAT的安装(Windows 11)
    做事软件开发-法的重要性所在以及合理结论的认识
    【面试】JAVA四种引用 -强引用、软引用、弱引用、虚引用
    Python:AES+Base64的加密与解密(ECB模式)
    大名鼎鼎的OceanBase居然在买Star了?
    基于同名面片的TLS测站点云配准
    【重拾C语言】九、再论函数(指针、数组、结构体作参数;函数值返回指针、结构体;作用域)
    typeScript 学习笔记(二)
    编译安装gcc-11及可能遇到的bug
    水库大坝可视化智能远程监管方案,助力安全监测智能巡检
  • 原文地址:https://blog.csdn.net/2302_77503226/article/details/136604345