filebeat+elasticsearch+logstash+

作者: YyYy_G | 来源:发表于2019-09-29 17:20 被阅读0次

    1.使用的软件

    我们这里用到的是filebeat+elk(elasticsearch+logstash+kibana)来进行系统日志的收集。filebeat安装在各个服务器中,Logstash+ElasticSearch+Kibana安装在一台专门用于基础服务的服务器上。

    其架构如下 filebeat+ELK.png

    2.各软件说明

    2.1 filebeat

    Filebeat是一个轻量级的托运人,用于转发和集中日志数据. Filebeat作为代理安装在服务器上,监视您指定的日志文件或位置,收集日志事件,并将它们转发到ElasticSearchLogstash进行索引.

    官方中文文档:https://s0www0elastic0co.icopy.site/guide/en/beats/filebeat/current/index.html

    2.2 Logstash

    Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。

    官方中文文档:https://s0www0elastic0co.icopy.site/guide/en/logstash/current/index.html

    2.3 ElasticSearch

    Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库--无论是开源还是私有。

    官方中文文档:https://s0www0elastic0co.icopy.site/guide/en/elasticsearch/reference/current/index.html

    《Elasticsearch:权威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

    2.4 Kibana

    Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。

    官方中文文档:https://www.elastic.co/guide/cn/kibana/current/index.html

    3.配置文件说明

    3.1 nginx配置文件

    nginx.conf中设置日志文件格式:

     log_format  main  $time_iso8601 | $remote_addr | $http_host | $request_method | $request_uri | $server_protocol | $status | $body_bytes_sent | $http_referer | $http_user_agent | $request_time |;
    ​
    access_log /var/log/nginx/access.log main;
    

    各字段解释:访问时间和时区 | 客户端ip | 请求地址(浏览器输入的ip或域名) | http请求方法(get或post等) | 客户端请求的原始uri | 服务器的HTTP版本,通常为 "HTTP/1.0" 或 "HTTP/1.1 | http状态码 | 传给客户端的字节 | url跳转来源,用来记录从那个页面链接访问过来的 | 用户浏览器信息 | 客户端请求时间 |

    修改完成后,通过sudo nginx -t来检查配置文件是否正确,然后sudo nginx -s reload来重启

    3.2 filebeat配置文件

    filebeat各系统安装教程详见官方文档。

    我这里安装的deb包(rpm包也同样),配置文件在/etc/filebeat/filebeat.yml,

    filebeat.inputs: #filebeat的输入部分
    ​
    - type: log #输入的类型
    ​
     enabled: true #filebeat6.0之后需要设置为true
    ​
     #收集的日志路径
     paths: 
     - /var/log/nginx/access.log
     #
     fields: #额外添加的字段 添加字段用来logstash输出时判断传入哪个索引
     log_source: yg_access
     log_type: accesslog
    ​
     tags: ["yg-accesslog"] #分组标志 该信息用于logstash对该组数据进行处理
    ​
     #scan_frequency: 1s
     close_inactive: 1m
    ​
    - type: log
    ​
     enabled: true
    ​
     paths:
     - /var/log/nginx/error.log
    ​
     fields:
     log_source: yg_error
     log_type: errorlog
    ​
     tags: ["yg-errorlog"]
    
     output.logstash:
     # The Logstash hosts 输入到logstash
     hosts: ["172.16.1.1:5044"]
    
    

    filebeat命令:

    systemctl start filebeat              #启动filebeat服务
    systemctl enable filebeat             #设置开机自启动
    systemctl disable filebeat            #停止开机自启动
    systemctl status filebeat             #查看服务当前状态
    systemctl restart filebeat           #重新启动服务
    
    3.3 logstash配置
    docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -d --restart=always -v /usr/local/logstash:/etc/logstash -v /etc/localtime:/etc/localtime --name elk sebp/elk:624
    

    参数介绍:

    -p  指定容器和宿主机映射端口
     5601:  kibana服务端口 HTTP  (web访问)
     9200: Elasticsearch 开发端口 HTTP,保存数据到Elasticsearch中使用
     5044: logstash  收集日志端口 TCP
    -d 后台运行
    --restart=always docker重启是总是运行
    -v  挂载目录 可以将logstash 的配置文件挂载在宿主机的目录上,方便随时修改,修改后的配置文件会同步到容器中。
     挂载 /etc/localtime 该目录是为了保证容器和宿主机的时区相同。
     通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
     现在镜像内就可以共享宿主机里的文件了。
    

    在/usr/local/文件夹下依次创建logstash/conf.d/logstash.conf

    input {
        beats {
            port => 5044
        }
    }
    
    filter {
            if "yg-accesslog" in [tags] {
                     grok {
                            match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\|%{IP:remote_addr}\|%{DATA:http_host}\|%{DATA:request_method}\|%{DATA:request_uri}\|%{DATA:server_protocol}\|%{NUMBER:status}\|(?:%{NUMBER:body_bytes_sent}|-)\|(?:%{DATA:http_referer}|-)\|%{DATA:http_user_agent}\|(?:%{DATA:request_time}|-)\|"}
                    }
                    mutate {
                            convert => ["status","integer"]
                            convert => ["body_bytes_sent","integer"]
                            convert => ["request_time","float"]
                    }
                    geoip {
                            source=>"remote_addr"
                    }
                    useragent {
                            source=>"http_user_agent"
                    }
            }
            #如果需要可以一些errorlog的处理语句
    }
    
    output {
       if [fields][log_type] == "accesslog" {
            elasticsearch {
                    hosts => ["127.0.0.1:9200"]
                    index => "yg-nginx-accesslog" ##根据不同的日志存入不同的索引中
            }
       }
       if [fields][log_type] == "errorlog" {
            elasticsearch {
                    hosts => ["127.0.0.1:9200"]
                    index => "yg-nginx-errorlog" ##对应es索引名
            }
       }
    }
    

    !!!注意:grok中的正则如果不符合日志的格式,需要及时修改正则

    grok正则在线验证地址:http://grokdebug.herokuapp.com

    正则代表的含义:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

    配置成功后,执行如下命令重启docker中的logstash (有时会重启失败,多试几次吧)

    docker exec elk /etc/init.d/logstash restart
    
    3.4 kibana设置

    在浏览器中输入 http://ip:5601 进入kibana

    然后如下设置

    kibana设置1.png

    然后创建 index pattern

    kibana设置2.png

    然后选择@timestamp


    kibana设置3.png

    最后在Discover标签页就可以看到了

    相关文章

      网友评论

        本文标题:filebeat+elasticsearch+logstash+

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