zoukankan      html  css  js  c++  java
  • elk搜集日志,实现logstash根据message中结构不同动态创建索引并扩展功能,区分message中json和非json数据简单方式

    搜集日志,但是框架本身也会打印很多日志是字符串的。我们自己希望的日志用json,但是又需要json字段可以扩展,logstash收集日志后都放在了message字段中,我们自定义打印的是json串,spring打印的是string,为此我们要分别处理日志,把框架日志和一般信息日志和我们的有用数据日志分开,并且有用数据记录的日志可以按照不同索引分类

    为此我们的搜集日志时需要动态处理

    logstash.conf如下:

    input {
        tcp {  
        ##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9601端口接收logback发出的消息  
            host => "写你的logstash-ip"  
            port => 端口
        #模式选择为server  
            mode => "server"  
            tags => ["tags"]  
    
        ##格式json  
           codec=>"json"        
        }  
    
    } 
    filter {
    #可以是你自定义的一个特殊标识如indexName(自定义日志中必然存在,其他不存在的一个字段key),
    以此来区分message的内容是json的可以转成json,并将json的key值及嵌套key值放在elasticsearch的一级别下
        if "indexName" in [message]{ 
            json {
            
                source => "message"
            }
            mutate {
              add_field => { "exttmp" => "%{ext}" }
            }
            json {
              source => "exttmp"
              remove_field => ["exttmp"]
            }
        }
    }
    output {
        if "indexName" in [message]{#####收集特殊关注的自定义日志
            elasticsearch {
            #ES地址
                    hosts => "你的kibana-ip:端口"
            #自定义索引搜集我们重点关注的日志数据
                    index => "%{[indexName]}"
            }
            stdout { codec => rubydebug}
        }else {#####收集不特殊关注的自定义日志或框架日志
            elasticsearch {
            #kibana
                    hosts => "你的kibana-ip:端口"
            #项目名做索引搜集一般的日志
                    index => "%{[project]}"
            }
            stdout { codec => rubydebug}
        }
    }

    loggerback.xml

    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>配置你logstash ip:端口</destination>
            <!-- encoder必须配置,有多种可选 -->
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
                <providers>
                    <timestamp>
                        <timeZone>UTC</timeZone>
                    </timestamp>
                    <pattern>
                        <pattern>
                            {
                            "severity": "%level",
                            "service": "${springAppName:-}",
                            "trace": "%X{X-B3-TraceId:-}",
                            "span": "%X{X-B3-SpanId:-}",
                            "exportable": "%X{X-Span-Export:-}",
                            "pid": "${PID:-}",
                            "thread": "%thread",
                            "class": "%logger{40}",
                            "rest": "%message"
                            }
                        </pattern>
                    </pattern>
                </providers>
                <customFields>{"project":"elasticsearch-test"}</customFields>
            </encoder>
        </appender>
        <!--myibatis log configure-->
        <logger name="com.apache.ibatis" level="TRACE"/>
        <logger name="java.sql.Connection" level="DEBUG"/>
        <logger name="java.sql.Statement" level="DEBUG"/>
        <logger name="java.sql.PreparedStatement" level="DEBUG"/>
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="stash" />
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
  • 相关阅读:
    命名是个技术活(转)
    我想知道的是这个月哪种商品销售量最高,比上个月怎么样?销量近几个月的走势是什么?有没有未达标的?有没有超额完成的?超额完成了多少?我可不关心这个月到底售出了多少件,几点售出的,谁买的(转)
    一个demo
    oracle 创建字段自增长——两种实现方式汇总(转)
    Ruby 一些经常使用的细节
    CMap与hash_map效率对照
    Unity 4.5.2 for Mac 下载+安装+破解
    Android中View绘制流程以及invalidate()等相关方法分析
    Android Studio 100 tips and tricks
    JavaScript-2.2 document.write 输出到页面的内容
  • 原文地址:https://www.cnblogs.com/xiaoyao-001/p/13273198.html
Copyright © 2011-2022 走看看