ELK-----------------

微服务的项目大多都有好几个工程,日志缺少一个统一的管理,研究了一下elk,logstash接受日志,elasticsearch 处理数据,kibana展示数据。

elk使用现成的docker镜像

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk
5601 - Kibana web 接口
9200 - Elasticsearch JSON 接口
5044 - Logstash 日志接收接口
logstash有许多种接受数据的方式,这边我尝试了两种,一种是应用使用logback直接通过tcp的方式发送日志到logstash,还有就是使用redis作为消息队列对日志数据做一个中转 。

tcp的方式
由于sebp/elk中logstash的input的方式默认是filebeat,首先们需要进入elk容器中修改input方式。logstash默认会将etc/logstash/conf.d/中的配置文件进行整合然后启动

docker exec -it elk /bin/bash 进入容器

cd etc/logstash/conf.d/

vim 02-beats-input.conf 修改input配置

input {
tcp {
port => 5044
codec => json_lines

} 

}
output{
elasticsearch {
hosts => [“localhost:9200”]

} 

}
然后退出容器。

重启容器

docker restart elk
到pom文件添加依赖

net.logstash.logback logstash-logback-encoder 4.7 接下来到工程中添加logback的配置

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<springProperty scope="context" name="springAppName"
                source="spring.application.name" />

<!-- 日志在工程中的输出位置 -->
<property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}" />

<!-- 控制台的日志输出样式 -->
<property name="CONSOLE_LOG_PATTERN"
          value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />

<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
    <!-- 日志输出编码 -->
    <encoder>
        <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>

<!-- 为logstash输出的JSON格式的Appender -->
<appender name="logstash"
          class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>127.0.0.1:5044</destination>
    <!-- 日志输出编码 -->
    <encoder
            class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <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>
    </encoder>
</appender>

<!-- 日志输出级别 -->
<root level="INFO">
    <appender-ref ref="console" />
    <appender-ref ref="logstash" />
</root>
> 启动工程,日志就被发送到logstash中了。访问localhost:5601可以进入kibana界面

配置pattern

输入*,匹配所有数据

选择时间@timestamp,这样数据展示会以时间排序

点击discover

可以显示日志信息

redis的方式
Redis 服务器是 logstash 官方推荐的 broker 选择。
读取 Redis 数据
LogStash data_type(实际上是redis_type) ,不同的数据类型会导致实际采用不同的 Redis 命令操作:
list => BLPOP
channel => SUBSCRIBE
pattern_channel => PSUBSCRIBE

配置示例

input {
redis {
codec => json
host => “192.168.2.246”
port => 56379
key => “data-mgr”
data_type => “list”
}
}
我这边是使用list的方式,更改完input配置后,同样的重启elk容器

工程这边pom文件中添加依赖

com.cwbase logback-redis-appender 1.1.5 将LOGSTASH的appender换成 mySource mySourcePath appName dev 127.0.0.1 56379 data-mgr 一般考虑到性能上的影响,日志使用异步的方式发送到redis,再添加一个异步的appender 启动应用多个微服务应用

完成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值