ELK日志收集

作者: 酷酷的伟 | 来源:发表于2019-10-06 06:37 被阅读0次

    1.找出访问排名前10的IP
    2.找出访问排名前10的URL
    3.找出10点到14点之间访问频次最高的IP和URL
    4.找出10点到14点之间bbs网站访问最高的IP和URL
    5.找出攻击者的IP,他都访问了什么页面?从什么时候来的,什么时候走的,一共访问多少次
    6.找出昨天和今天同时间段访问有什么变化
    7.查看各大搜索引擎今天访问了多少次,都访问了哪些页面
    8.找出哪些是伪造的爬虫IP,并查封
    9.5分钟内告诉我结果

    资料链接

    image
    Elasticsearch java 存储,提供数据
    Logstash java 收集日志,转发到ES,过滤转换字段
    Kibana java 过滤,分析,搜索,展示
    Filebeat GO 收集日志,转发给ES
    image image

    kibana安装

    [root@elk01 /server/tools/EFLK软件包v6.6.0]# ls
    ansible_elk.tar.gz
    elasticsearch-6.6.0.rpm
    filebeat-6.6.0-x86_64.rpm
    kibana-6.6.0-x86_64.rpm
    logstash-6.6.0.rpm
    
    
    rpm -ivh kibana-6.6.0-x86_64.rpm
    
    

    kibana配置

    [root@lb01 /data/soft]# grep "^[a-z]" /etc/kibana/kibana.yml
    server.port: 5601
    server.host: "10.0.0.5"
    elasticsearch.hosts: ["http://10.0.0.5:9200"]
    kibana.index: ".kibana"
    
    重启kibana
    systemctl restart kibana.service
    
    
    image.png
    image image image image

    filebeat

    安装filebeat
    rpm -ivh filebeat-6.6.0-x86_64.rpm 
    
    查看配置文件路径
    [root@elk01 ~]# rpm -qc filebeat 
    /etc/filebeat/filebeat.yml
    
    修改配置文件
    [root@elk01 ~]# vim  /etc/filebeat/filebeat.yml
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/access.log
    output.elasticsearch:
      hosts: ["10.0.0.5:9200"]
    
    启动filebeat
    [root@elk01 ~]# systemctl restart filebeat.service
    
    查看日志
    [root@elk01 ~]# tail -f /var/log/filebeat/filebeat 
    
    安装nginx
    [root@elk01 ~]# yum install -y nginx
    
    启动nginx
    [root@elk01 ~]# systemctl restart nginx.service 
    
    在浏览器上刷一些访问日志
    http://10.0.0.5/YouArePig
    
    查看nginx的日志
    [root@elk01 ~]# tail -f /var/log/nginx/access.log
    
    filebeat工作原理
    100条
    停止filebeat
    110条
    启动filebeat
    
    

    刷新elasticsearch-head插件

    image

    操作kibana

    image image image image image image image

    收集Nginx的json日志

    第一步:修改nginx日志为json格式,重启nginx

    > /var/log/nginx/access.log
    
    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"'
     ' }';
    
    systemctl restart nginx
    
    access_log  /var/log/nginx/access.log  json; 
    
    

    第二步:修改filebeat配置文件

    [root@lb01 ~]# cat /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: ["10.0.0.5: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
    
    =================================
    
    

    重启filebeat

    systemctl restart filebeat
    
    

    第三步: 访问nginx

    ab -c 10 -n 100 http://10.0.0.5/oldzhang.html
    
    

    第四步: kibana添加索引

    ELK日志收集系统—收集Docker日志

    1. 使用filebeat modules收集json的nginx日志文件

    使用filebeat modules收集普通格式的nginx日志
    
    第零步: 下载es插件
    http://192.168.0.163/elk/ingest-geoip-6.6.0.zip    
    http://192.168.0.163/elk/ingest-user-agent-6.6.0.zip
    
    第一步: 修改nginx日志格式为普通格式
    修改nginx.conf配置文件
    
    第二步: 清空nginx日志
    > /var/log/nginx/access.log 
    
    第三步: 重启nginx并验证日志格式是否为普通格式了
    nginx -t
    systemctl restart nginx 
    curl 127.0.0.1 
    cat /var/log/nginx/access.log
    
    第四步: 修改filebeat配置文件
    [root@lb01 ~]# cat /etc/filebeat/filebeat.yml 
    filebeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: true 
    
    output.elasticsearch:
      hosts: ["10.0.0.5:9200"]
      indices:
      - index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}"
        when.contains:
          fileset.name: "access"
      - index: "nginx-error-%{[beat.version]}-%{+yyyy.MM}"
        when.contains:
          fileset.name: "error"
    
    setup.template.name: "nginx"
    setup.template.pattern: "nginx-*"
    setup.template.enabled: false
    setup.template.overwrite: true
    
    第五步: 激活模块并查看模块
    filebeat modules enable nginx
    filebeat modules list
    
    第六步: 配置nginx模块
    [root@lb01 ~]# cat /etc/filebeat/modules.d/nginx.yml 
    - module: nginx
      access:
        enabled: true
        var.paths: ["/var/log/nginx/access.log"]
    
      error:
        enabled: true
        var.paths: ["/var/log/nginx/error.log"]
    
    第七步: 安装es插件
    #注意!第一个插件geoip会提示你输入Y
    
    cd /usr/share/elasticsearch/bin/
    ./elasticsearch-plugin install file:///root/ingest-geoip-6.6.0.zip 
    ./elasticsearch-plugin install file:///root/ingest-user-agent-6.6.0.zip
    
    第八步: 重启es
    systemctl restart elasticsearch
    
    第九步: 重启filebeat 
    systemctl restart filebeat
    
    第十步: 访问测试nginx
    curl 127.0.0.1/lalalalal 
    
    第十一步: es-head查看
    查看是否生成了2个索引 
    nginx-access-6.6.0-2019.08
    nginx-error-6.6.0-2019.08
    
    第十二步: kibana添加查看
    添加2个索引,查看是否解析成json了
    
    
    image image

    2. docker的安装

    Docker_ELK部署实践

    rm -fr /etc/yum.repos.d/local.repo
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
    sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
    yum install docker-ce -y
    systemctl start docker
    cat >  /etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    EOF
    systemctl restart docker
    
    

    docker名词

    docker-ce : 软件名称
    镜像 : nginx镜像
    容器 : 运行一个微型的linux系统 
    端口映射: 宿主机对应容器内的端口
    
    

    常用命令:

    启动docker 
    systemctl start docker 
    
    查看镜像:
    docker images  
    
    查看正在运行的容器:
    docker ps 
    
    查看所有的容器:
    docker ps -a 
    
    查看容器日志
    docker logs -f xxxx
    
    导出镜像
    docker save nginx -o nginx.tar
    
    导入镜像
    docker load -i nginx.tar
    
    运行容器:
    docker run --name nginx -p 80:80 -d nginx
    
    停止容器
    docker stop nginx
    
    拉取镜像
    docker pull nginx
    
    查看容器所有信息
    docker inspect nginx
    
    

    收集单个容器日志

    目前的问题:
    1.索引名称是默认的
    2.access和error写在了一起
    
    我们想要的结果:
    1.索引名称自定义
    2.access和error分开存储
    
    目标:
    1.添加标签tag或者判断条件
    
    实现:
    1.通过关键字段"stream"可以判断
    "stream": "stdout"
    "stream": "stderr"
    
    filebeat配置文件:
    
    

    收集多个容器日志

    docker commit nginx nginx:v2
    docker images
    docker run --name nginx:v2 -p 8080:80 -d nginx:v2
    docker ps -q
    
    问题:
    1.无法按服务区分出来容器的日志
    2.所有容器的日志都打在了一起
    
    

    按容器的服务类型去创建不同的索引

    理想中的索引:
    mysql : 
    docker-db-access-6.6.0-2019.08
    docker-db-error-6.6.0-2019.08
    
    nginx :
    docker-nginx-access-6.6.0-2019.08
    docker-nginx-error-6.6.0-2019.08
    
    解决方案:
    使用docker-compose把标签打进容器的日志里
    
    第一步: 安装docker-compose命令
    1.安装docker-compose
    yum install -y python2-pip
    
    2.这里使用pip安装,默认源为国外,可以使用国内加速,相关网站
    https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
    pip加速操作命令
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    
    3.继续安装docker-compose
    pip install docker-compose
    
    4.检查
    docker-compose version
    
    第二步: 编写docker-compose文件
    root@lb02 ~]# cat docker-compose.yml 
    version: '3'
    services:
      nginx:
        image: nginx:v2
        # 设置labels
        labels:
          service: nginx
        # logging设置增加labels.service
        logging:
          options:
            labels: "service"
        ports:
          - "8080:80"
      db:
        image: nginx:latest
        # 设置labels
        labels:
          service: db 
        # logging设置增加labels.service
        logging:
          options:
            labels: "service"
        ports:
          - "80:80"
    
    第三步: 删除以前的容器
    docker stop $(docker ps -q)
    docker rm $(docker ps -aq)    
    
    第四步: 运行docker-compose命令
    启动命令
    docker-compose up  -d 
    停止命令
    docker-compose stop 
    
    第五步: 配置filebeat
    [root@lb02 ~]# cat /etc/filebeat/filebeat.yml 
    filebeat.inputs:
    - type: log 
      enabled: true
      paths:
        - /var/lib/docker/containers/*/*-json.log
      json.keys_under_root: true
      json.overwrite_keys: true
    
    output.elasticsearch:
      hosts: ["10.0.0.5:9200"]
    
      indices:
      - index: "docker-nginx-access-%{[beat.version]}-%{+yyyy.MM}"
        when.contains:
          attrs.service: "nginx"
          stream: "stdout"
    
      - index: "docker-nginx-error-%{[beat.version]}-%{+yyyy.MM}"
        when.contains:
          attrs.service: "nginx"
          stream: "stderr"
    
      - index: "docker-db-access-%{[beat.version]}-%{+yyyy.MM}"
        when.contains:
          attrs.service: "db"
          stream: "stdout"
    
      - index: "docker-db-error-%{[beat.version]}-%{+yyyy.MM}"
        when.contains:
          attrs.service: "db"
          stream: "stderr"
    
    setup.template.name: "docker"
    setup.template.pattern: "docker-*"
    setup.template.enabled: false
    setup.template.overwrite: true
    
    第六步: 重启filebeat
    systemctl restart filebeat
    
    第七步: 检查索引是否生成
    
    

    相关文章

      网友评论

        本文标题:ELK日志收集

        本文链接:https://www.haomeiwen.com/subject/nljoectx.html