zoukankan      html  css  js  c++  java
  • ELK--01 Filebeat拆分索引

    ELK--01


    1.ELK简介


    elk的组成
    E  Elasticsearch  java编写
    F  filebeat 	  go编写   #注意:那台有服务那台需要装filebeat
    K  kibana 	      java编写
    L  logstash	      java编写
    
    注意:java编写的服务启动慢,占用内存大
          go语言编写的服务,轻便,速度快
          
    #filebeat工作原理
    1.类似tail -f 只读取最新的日志并发给ES
    2.会自动记录读取的最新行,不会重读。
    


    2.日志分析的需求


    1.找出访问排名前10的IP  所有的流量 
    2.找出访问排名前10的URL 
    3.再分析一下11点到12点之间的数据 
    4.对比昨天这个时间段和今天这个时间段访问频次有什么变化 
    5.对比上周某天某个时间段某个特定链接的流量和今天这个这个时间段链接的流量
    6.找出特定页面被访问了多少次 
    7.找出有问题的IP
      并告诉我这个IP地址都访问了什么页面?
      对比前几天他来过吗?
      他什么时间开始攻击的?什么时间结束攻击的?
    8.找出访问最慢的前10个页面
      并且统计平均响应时间
      并且对比昨天这个时间段访问也这么慢吗? 
      从哪一天开始变慢的?
    9.找出搜索引擎今天抓取了多少次?
      抓取了哪些页面?
      响应时间如何?
    10.找出伪造成搜索引擎的IP地址
    

    3.日志收集分类


    系统层:message secure
    代理层:nginx haproxy
    web层:nginx php tomcat 
    db层: mysql redis mongo es
    存储层:nfs gfs
    

    4.准备单机环境


    db01需要安装的服务  nginx filebeat es kibana es-head 
    db02需要安装的服务  nginx filebeat
    
    0.需要时间同步
    [root@db01 ~]# yum install -y ntpdate
    #手动更新时间
    ntpdate time1.aliyun.com
    #编写定时任务
    [root@db01 ~]# crontab -l
    #时间同步
    */3 * * * * /usr/sbin/ntpdate ntpdate ntp1.aliyun.com &>/dev/null
    
    1.es单机环境准备
    [root@db01 ~]# cat >/etc/elasticsearch/elasticsearch.yml <<EOF
    node.name: node-1
    path.data: /var/lib/elasticsearch
    path.logs: /var/log/elasticsearch
    network.host: 10.0.0.51,127.0.0.1
    http.port: 9200
    EOF
    
    #停掉es
    [root@db01 ~]#  systemctl stop elasticsearch
    #删除es的数据
    [root@db01 ~]#  rm -rf /var/lib/elasticsearch/*
    #删除kibana的数据
    [root@db01 ~]#  rm -rf /var/lib/kibana/*
    #启动es
    [root@db01 ~]#  systemctl start elasticsearch
    #启动kibana
    [root@db01 ~]#  systemctl start kibana
    #查看es的日志,确认是否后启动成功
    [root@db01 ~]#  tail -f /var/log/elasticsearch/elasticsearch.log
    #查看端口是否存在
    [root@db01 ~]#  netstat -lntup|egrep "5601|9200"
    tcp        0      0 10.0.0.51:5601          0.0.0.0:*               LISTEN      15081/node          
    tcp6       0      0 10.0.0.51:9200          :::*                    LISTEN      14843/java          
    tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      14843/java 
    


    5.filebeat收集Nginx普通格式日志 ( 在DB01安装配置 )


    0.卸载es环境创建的分词器
    /usr/share/elasticsearch/bin/elasticsearch-plugin remove analysis-ik --purge
    
    systemctl restart elasticsearch.service
    
    1.安装Nginx( 配置nginx源 )
    [root@db01 ~]# cat >/etc/yum.repos.d/nginx.repo <<EOF
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    EOF
    
    #安装nginx
    [root@db01 ~]# yum install nginx -y 
    #重新启动nginx并加入开机自启
    [root@db01 ~]# systemctl start nginx 
    [root@db01 ~]# systemctl enable nginx
    #测试连接
    [root@db01 ~]# curl 127.0.0.1
    
    2.配置Nginx并创建测试页面
    #删除默认配置文件
    [root@db01 ~]# rm -rf /etc/nginx/conf.d/default.conf 
    #配置nginx配置文件
    [root@db01 ~]# cat >/etc/nginx/conf.d/www.conf<<EOF
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /code/www;
            index  index.html index.htm;
        }
    }
    EOF
    
    #根据配置文件创建目录
    [root@db01 ~]# mkdir /code/www/ -p
    
    #创建测试页面内容
    [root@db01 ~]# echo "db01-www" > /code/www/index.html
    #检查
    [root@db01 ~]# nginx -t
    #重启nginx
    [root@db01 ~]# systemctl restart nginx
    #测试连接
    [root@db01 ~]# curl 127.0.0.1
    #查看日志
    [root@db01 ~]# tail -f /var/log/nginx/access.log
    
    3.安装filebet
    [root@db01 ~]# rpm -ivh filebeat-6.6.0-x86_64.rpm
    
    4.配置filebeat
    [root@db01 ~]# cat >/etc/filebeat/filebeat.yml<<EOF
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/access.log
    output.elasticsearch:
      hosts: ["10.0.0.51:9200"]
    EOF
    
    5.启动测试
    [root@db01 ~]# systemctl start filebeat
    
    6.检查结果
    [root@db01 ~]# tail -f /var/log/filebeat/filebeat
    [root@db01 ~]# curl -s 127.0.0.1:9200/_cat/indices|awk '{print $3}'
    
    7.es-head插件查看
    
    8.kibana添加索引
    Management-->kibana-->Index Patterns-->filebeat-6.6.0-2020.02.13
    

    es插件安装

    kibana添加索引


    6.filebeat收集Nginx的json格式日志


    1.普通Nginx日志不足的地方:
    - 日志都在一个value里,不能拆分单独显示和搜索
    - 索引名称没有意义
    
    2.理想中的情况
    {
        $remote_addr : 192.168.12.254
        - : -
        $remote_user : -
        [$time_local]: [10/Sep/2019:10:52:08 +0800]
        $request: GET /jhdgsjfgjhshj HTTP/1.0
        $status : 404
        $body_bytes_sent : 153
        $http_referer : -
        $http_user_agent :ApacheBench/2.3
        $http_x_forwarded_for:-
    }
    
    3.目标
    将Nginx日志转换成json格式
    
    4.修改nginx配置文件使日志转换成json
    log_format json '{ "time_local": "$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",'
                              '"upstream_time": "$upstream_response_time",'
                              '"request_time": "$request_time"'
        ' }';
        access_log  /var/log/nginx/access.log  json;
    
    #清空旧日志
    [root@db01 ~]# > /var/log/nginx/access.log
    
    #检查并重启nginx
    [root@db01 ~]# nginx -t
    [root@db01 ~]# systemctl restart nginx 
    
    5.修改filebeat配置文件
    cat >/etc/filebeat/filebeat.yml<<EOF
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/access.log
      json.keys_under_root: true
      json.overwrite_keys: true
    output.elasticsearch:
      hosts: ["10.0.0.51:9200"]
    EOF
    
    6.删除旧的ES索引
    es-head >> filebeat-6.6.0-2019.11.15 >> 动作 >>删除 
    
    7.删除kibana里面的日日志信息
    
    8.重启filebeat
    [root@db01 ~]# systemctl restart filebeat
    
    9.curl 一下nginx,并在es-head插件查看
    [root@db01 ~]# curl 127.0.0.1
    db01-www
    


    7.filebeat自定义ES索引名称


    1.理想中的索引名称
    filebeat-6.6.0-2020.02.13
    nginx-6.6.0-2019.11.15
    
    2.filebeat配置
    [root@db01 ~]# cat >/etc/filebeat/filebeat.yml<<EOF
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/access.log
      json.keys_under_root: true
      json.overwrite_keys: true
    
    output.elasticsearch:
      hosts: ["10.0.0.51:9200"]
      index: "nginx-%{[beat.version]}-%{+yyyy.MM}"
    
    setup.template.name: "nginx"
    setup.template.pattern: "nginx-*"
    setup.template.enabled: false
    setup.template.overwrite: true
    EOF
    
    3.重启filebeat
    [root@db01 ~]# systemctl restart filebeat
    
    4.生成新日志并检查
    [root@db01 ~]# curl 127.0.0.1
    
    5.es-head插件查看并在中kibana添加
    


    8.filebeat按照服务类型拆分索引


    1.理想中的情况:
    nginx-access-6.6.0-2020.02
    nginx-error-6.6.0-2020.02
    
    2.filebeat配置
    #第一种方法:
    [root@db01 ~]# cat >/etc/filebeat/filebeat.yml <<EOF
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/access.log
      json.keys_under_root: true
      json.overwrite_keys: true
    
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/error.log
    
    output.elasticsearch:
      hosts: ["10.0.0.51:9200"]
      indices:
        - index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}"
          when.contains:
            source: "/var/log/nginx/access.log"
        - index: "nginx-error-%{[beat.version]}-%{+yyyy.MM}"
          when.contains:
            source: "/var/log/nginx/error.log"
        
    setup.template.name: "nginx"
    setup.template.pattern: "nginx-*"
    setup.template.enabled: false
    setup.template.overwrite: true
    EOF
    
    #第二种方法:
    [root@db01 ~]# cat >/etc/filebeat/filebeat.yml <<EOF   
    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: ["10.0.0.51:9200"]
      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.pattern: "nginx-*"
    setup.template.enabled: false
    setup.template.overwrite: true
    EOF
    
    3.重启filebeat
    [root@db01 ~]# systemctl restart filebeat 
    
    4.生成正确和错误的测试数据
    [root@db01 ~]# curl 127.0.0.1/haahha
    [root@db01 ~]# curl 127.0.0.1
    
    5.检查是否生成对应的索引
    nginx-access-6.6.0-2020.02
    nginx-error-6.6.0-2020.02
    


  • 相关阅读:
    Hibernate提供的内置标识符生成器
    ThreadLocal解析
    save()/saveOrUpdate()/merge()的区别
    Hibernate中主键生成策略
    session/SessionFactory线程非安全和线程安全
    load/get延迟加载和及时加载
    最长公共子序列:递归,非递归实现
    c语言,递归翻转一个单链表,c实现单链表
    最长递增子序列(Longest Increase Subsequence)
    求一串数字中——和最大的连续子序列; 求一串数字差值的绝对值最小的两个数字
  • 原文地址:https://www.cnblogs.com/gongjingyun123--/p/12397960.html
Copyright © 2011-2022 走看看