设为首页 收藏本站
查看: 1189|回复: 0

[经验分享] ELK应用

[复制链接]

尚未签到

发表于 2019-1-28 10:22:46 | 显示全部楼层 |阅读模式
  ELK说明:
  Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等
  Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)
  kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志
  
  功能:
  1.方便日志查询,统计排查问题
  2.报表展示,不用登录每台服务器查看日志
  组件:
  Logstash: logstash server端用来搜集日志;
  Elasticsearch: 存储各类日志;
  Kibana: web化接口用作查寻和可视化日志;
  

  搭建部署(略)
  

  应用:收集syslog,nginx access/error日志,mongo日志,程序日志;说明如下:
  nignx 访问日志:因nginx访问日志可自定义,这里自定义为json格式,方便ES存储和索引
  格式定义如下:
log_format main_json '{ "timestamp": "$time_local", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"domain": "$host", '
'"request": "$request", '
'"request_method": "$request_method", '
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" }';  其他日志收集见配置文件,说明如下:
input {
    file {
        path => [ "/var/log/syslog" ]    #定义日志路径
        type => "syslog"               
        start_position => "beginning"
        ignore_older =>0
    }
    file {
        path => "/var/log/nginx/*access.log"
        codec => json
        start_position => "beginning"
        type => "nginx-acc"
    }
    file {
        path => "/var/log/nginx/*error.log"
        start_position => "beginning"
        type => "nginx-error"
        ignore_older =>0
    }
    file {
        path => [ "/data/mongo/mongo.log" ]
        type => "mongo"
        start_position => "beginning"
        #ignore_older =>0
        }
}
filter {
    if [type] == "syslog" {
        grok {    #grok 功能将字符串转换为相应的字段,方便检索
            match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
            add_field => [ "received_at", "%{@timestamp}" ]
            add_field => [ "received_from", "%{host}" ]
            }   
            date {
                    match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
            }
        }
    if [type] == "mongo" {
                grok {
#mongo_v3                        match => ["message","%{TIMESTAMP_ISO8601:timestamp}\s+%{MONGO3_SEVERITY:severity}\s+%{MONGO3_COMPONENT:component}\s+(?:\[%{DATA:context}\])?\s+%{GREEDYDATA:body}"]
            match => ["message","%{SYSLOGTIMESTAMP:timestamp} \[%{WORD:component}\] %{GREEDYDATA:body}"]     #mongo_v2
               }
                if[body]=~"ms$" {
                                        grok {
                                                match => ["body","query\s+%{WORD:db_name}\.%{WORD:collection_name}.*}.*\}(\s+%{NUMBER:spend_time:int}ms$)?"]
                                        }
                                }
                date {
                        match => [ "timestamp", "UNIX", "YYYY-MM-dd HH:mm:ss", "ISO8601" ]
                        remove_field => ["timestamp"]
                }
        }
    if [type] == "nginx-error" {
                grok {
                        match => { "message" => "(?%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}[- ]%{TIME}) \[%{LOGLEVEL:severity}\] %{POSINT:pid}#%{NUMBER}: %{GREEDYDATA:errormessage}(?:, client: (?%{IP}|%{HOSTNAME}))(?:, server: %{IPORHOST:server})(?:, request: %{QS:request})?(?:, upstream: \"%{URI:upstream}\")?(?:, host: %{QS:host})?(?: referrer: \"%{URI:referrer}|-\")?" }
                        overwrite => [ "message" ]
                }
                date {
                        match => [ "nginx_error_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
                        remove_field => [ "timestamp" ]
                }
        }
}
output {
    if [type] == "nginx-acc" {
        elasticsearch {    #存储
            hosts => ["127.0.0.1:9200"]
            index => "nginx_access-%{+YYYY.MM.dd}"
        }        
    }
    if [type] == "nginx-error" {
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
            index => "nginx_error-%{+YYYY.MM.dd}"
        }        
    }
    if [type] == "syslog" {
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
            index => "syslog-%{+YYYY.MM.dd}"
        }
    }
    if [type] == "mongo" {
                elasticsearch {
            hosts => ["127.0.0.1:9200"]
                        index => "mongo-%{+YYYY.MM.dd}"
                }
        }
}  采集到数据展示如下:

  

  参考链接:
  https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

  https://grokdebug.herokuapp.com/

  http://logz.io/blog/nginx-log-analysis/

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668586-1-1.html 上篇帖子: ELK安装笔记 下篇帖子: ELK Stack
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表