• 部署ELK收集Nginx日志(redis缓存 Filebeat收集)


    转载于https://dbawsp.com/category/devops/elk

    Filebeat连接Redis数据库:

    • 当前已经把 Nginx日志配置为 json格式了(要修改nginx日志的格式,请复制下方日志配置到nginx配置中)
    • 如果没有安装nginx,请点击下方文章链接
     

    CentOS-7.5,源码编译Nginx-1.14.2详解

    1526
    log_format main_json '{"client_ip": "$remote_addr",'
    '"client_user": "$remote_user",'
    '"local_time": "[$time_local]",'
    '"request": "$request",'
    '"response_time": "$request_time",'
    '"upstream_time": "$upstream_response_time",'
    '"status_num": "$status",'
    '"response_size": "$body_bytes_sent",'
    '"skip_link": "$http_referer",'
    '"client_agent": "$http_user_agent",'
    '"new_subject": "$http_x_forwarded_for"'
    '}';
    
    access_log  /var/log/nginx/access.log  main_json;
     
    • 务必要关闭模板功能,都设置为 nginx.yml.disabled 关闭状态
      [root@web01 ~]# filebeat modules disable nginx
      Disabled nginx
       
    安装redis数据库:
    [root@web01 ~]# yum -y install redis
    [root@web01 ~]# vim /etc/redis.conf +61
    bind 0.0.0.0
    
    [root@web01 ~]# systemctl start redis.service
    [root@web01 ~]# systemctl enable redis.service
    [root@web01 ~]# netstat -tunpl |grep redis
    tcp        0      0 0.0.0.0:6379          0.0.0.0:*               LISTEN      2181/redis-server 1
     
    安装filebeat包:
    [root@web01 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.0-x86_64.rpm
    [root@web01 ~]# rpm -ivh filebeat-6.6.0-x86_64.rpm
    warning: filebeat-6.6.0-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:filebeat-6.6.0-1                 ################################# [100%]
     
    配置filebeat组件:
    [root@web01 ~]# vim /etc/filebeat/filebeat.yml
    
    filebeat.inputs:
    - type: log
      enabled: true    # 启用日志
      paths:
        - /var/log/nginx/access.log   # 指定nginx日志
      json.keys_under_root: true
      json.overwrite_keys: true
    filebeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: false    # 关闭模板
    outout.redis:
        hosts: ["172.18.1.100"]    # redis地址
        key: "filebeat"    # 在reidis内创建的key名称
        db: 0
        timeout: 5
     
    重启filebeat组件:
    [root@web01 ~]# systemctl restart filebeat.service
     
    查看redis数据数量:
    • 当前已经清空redis所有数据,也清空了nginx日志文件
    # llen 查看filebeat键的值有多少数量
    [root@web01 ~]# redis-cli llen filebeat
    (integer) 0
    
    # ab 压力测试 1000个请求
    [root@web01 ~]# ab -n 1000 -c 1000 http://172.18.1.100/
    
    # 此时日志已经缓存到了redis数据库中
    [root@web01 ~]# redis-cli llen filebeat
    (integer) 1000
    
    [root@web01 ~]# redis-cli rpop filebeat
    "{"@timestamp":"2019-12-17T06:45:43.875Z","@metadata":{"beat":"filebeat","type":"doc","version":"6.6.0"},"skip_link":"-","log":{"file":{"path":"/var/log/nginx/access.log"}},"local_time":"[17/Dec/2019:14:45:43 +0800]","input":{"type":"log"},"host":{"name":"web01.novalocal"},"source":"/var/log/nginx/access.log","offset":233766,"new_subject":"-","beat":{"hostname":"web01.novalocal","version":"6.6.0","name":"web01.novalocal"},"client_ip":"172.18.1.100","client_agent":"ApacheBench/2.3","client_user":"-","request":"GET / HTTP/1.0","status_num":"200","response_size":"11","prospector":{"type":"log"}}"
     

    配置Logstash拉取redis数据日志:

    [root@logstash ~]# yum install java-1.8.0-openjdk -y
    [root@logstash ~]# java -version
    
    openjdk version "1.8.0_191"
    OpenJDK Runtime Environment (build 1.8.0_191-b12)
    OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
     
    下载并安装软件包:
    [root@logstash ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.rpm
    [root@logstash ~]# rpm -ivh logstash-6.6.0.rpm 
    warning: logstash-6.6.0.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:logstash-1:6.6.0-1               ################################# [100%]
    Using provided startup.options file: /etc/logstash/startup.options
    OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
    Successfully created system startup script for Logstash
     
    配置logstash抓取redis中nginx日志:
    [root@logstash ~]# vim /etc/logstash/conf.d/nginx.conf
    
    input {
      redis {
        host => "172.18.1.100"    # redis地址
        port => "6379"    # redis端口
        db => "0"
        key => "filebeat"   # redis中filebeat组件的key名称
        data_type => "list"
      }
    }
    
    filter {
      mutate {
        convert => ["response_time","float"]    # 
        convert => ["upstream_time","float"]    # 
      }
    }
    
    output {
      elasticsearch {
        hosts => "http://172.18.1.76:9200"     # elasticsearch主机地址
        manage_template => false
        index => "nginx-%{+YYYY.MM}"       # 输入到elasticsearch后的索引名称
      }
    }
     
    查看redis数据数量:
    • 当 logstash拉取redis数据后会清理已经拉取的数据日志,最后是redis数据为空。
    [root@web01 ~]# redis-cli llen filebeat
    (integer) 1000
     
    启动logstash组件:
    [root@logstash ~]# systemctl start logstash
    [root@logstash ~]# systemctl enable logstash
     
    再次查看redis数据数量:
    [root@web01 ~]# redis-cli llen filebeat
    (integer) 0
     
    查看elasticsearch中索引:
    [root@db01 ~]# curl '172.18.1.76:9200/_cat/indices?v' 
    health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    green  open   nginx-2019.12                   PhGgYHNHTm2vKiNepQuOFg   5   1      11000            0      3.1mb          1.5mb
     

    安装Kibana页面:

    [root@db01 ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-x86_64.rpm
    [root@db01 ~]# rpm -ivh kibana-6.6.0-x86_64.rpm
     
    配置Kibana连接Es:
    [root@db01 ~]# vim /etc/kibana/kibana.yml
    
    server.port: 5601                                # kibana监听的端口
    server.host: "172.18.1.76"                       # kibana监听的IP地址
    elasticsearch.hosts: ["http://172.18.1.76:9200"] # kibana连接ES集群master节点地址
     
    启动Kibana:
    [root@db01 ~]# systemctl start kibana.service
    [root@db01 ~]# systemctl enable kibana.service
    [root@db01 ~]# netstat -tunpl |grep 5601
    tcp        0      0 172.18.1.76:5601        0.0.0.0:*               LISTEN      18542/node
     
    • 添加索引步骤略过

    折线图统计同IP访问次数:

    饼图统计访问状态码次数:

    柱状图统计URL访问次数:

     |

    添加图形到仪表盘展示:
    • 搜索刚刚保存的可视化图像名称,然后单击添加到dashboard仪表盘。

  • 相关阅读:
    MySQL面试题-基础
    IDEA 创建Spring项目后org.springframework.boot报错
    IDEA上传项目到SVN
    解决:idea中右键项目找不到subversion
    关于fromdata的上传文件问题
    PHP清除数组中为0的元素
    PHP删除数组中重复的元素
    PHP代码篇(六)--如何根据邀请人id查询满足条件的会员上级
    PHP对URL进行字符串编码
    PHP时间戳相互转换
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/14189859.html
Copyright © 2020-2023  润新知