今天看了会ELK收集日志的实现。将自己的浅薄的理解写一下:
ElasticSearch, 是用来搜索的,搜索收集到的日志信息
Logstash, 用来收集日志的发送给ElasticSearch
Kibana,貌似只是展示日志用的页面。
1 下载ELK。
https://www.elastic.co/cn/downloads
选择这三个下载就好了。
2 安装(启动)
安装的时候看很多blog说很复杂,可能是新版本的问题,并没有用到别人blog中描述的,仅仅是根据下载网站中download下边的安装教程就可以
2.1 首先启动ElasticSearch 直接点击解压文件bin目录下elasticsearch.bat就可以,win7环境下。
2.2 启动Logstash 切换到bin目录下,新建一个文件,将其后缀改为config 就可以了,官方例子挺好,结合 自己的 的工程配置 执行这段cmd命令就好了 logstash -f logstash.conf 注意正常起来的情况是一直运行状态,如果配置不对的话,会启动完成后就会退出程序了。
input {
tcp {
##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9250端口接收logback发出的消息
host => "localhost"
port => 9250
#模式选择为server
mode => "server"
tags => ["tags"]
##格式json
codec => json_lines
}
}
output {
stdout { codec => rubydebug }
#这里是es的地址
elasticsearch { hosts => "127.0.0.1:9200" }
}
2.3 启动 Kibana 首先修改配置文件 config-Kibana.yml文件,将里面全部注释的信息,想不用默认配置的话就打开并修改这项配置,然后同样简单执行 Kibana.bat就好了。
3 程序配置
3.1 src-main-resourses 中的logback-spring的文件修改为
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<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([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]){yellow} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<!-- 控制台Appender -->
<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>
<!-- <logger name="cn.com.yusys.yusp.uaa" level="DEBUG" />
<logger name="io.github.jhipster" level="INFO" />
<logger name="javax.activation" level="WARN" />
<logger name="javax.mail" level="WARN" />
<logger name="javax.xml.bind" level="WARN" />
<logger name="ch.qos.logback" level="WARN" />
<logger name="com.codahale.metrics" level="WARN" />
<logger name="com.ryantenney" level="WARN" />
<logger name="com.sun" level="WARN" />
<logger name="com.zaxxer" level="WARN" />
<logger name="io.undertow" level="WARN" />
<logger name="io.undertow.websockets.jsr" level="ERROR" />
<logger name="org.apache" level="WARN" />
<logger name="org.apache.catalina.startup.DigesterFactory"
level="OFF" />
<logger name="org.bson" level="WARN" />
<logger name="org.hibernate.validator" level="WARN" />
<logger name="org.hibernate" level="WARN" />
<logger name="org.hibernate.ejb.HibernatePersistence" level="OFF" />
<logger name="org.springframework" level="WARN" />
<logger name="org.springframework.web" level="WARN" />
<logger name="org.springframework.security" level="INFO" />
<logger name="org.springframework.cache" level="WARN" />
<logger name="org.thymeleaf" level="WARN" />
<logger name="org.xnio" level="WARN" />
<logger name="springfox" level="WARN" />
<logger name="sun.rmi" level="WARN" />
<logger name="liquibase" level="WARN" />
<logger name="LiquibaseSchemaResolver" level="INFO" />
<logger name="sun.rmi.transport" level="WARN" />
<logger name="com.netflix.discovery" level="INFO" /> -->
<!-- 为logstash输出的json格式的Appender -->
<!--<appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}.json</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</fileNamePattern> <maxHistory>7</maxHistory>
</rollingPolicy> <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> -->
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- <destination>local:9250</destination> -->
<destination>localhost:9250</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>
</configuration>
3.2 application-dev文件或者什么配置文件中
logging:
logstash: # Forward logs to logstash over a socket, used by LoggingConfiguration
enabled: true
host: 192.168.251.151
port: 9250
queue-size: 512
3.3 pom依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.9</version>
</dependency>
据官网要求这里的依赖有很多但是因为我本来的工程中已有所需要的所以就单纯这个一个。一般应该下边的都会有了,不需要额外添加。
所需要全部如下
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.2</version>
<scope>compile</scope>
</dependency>
4 成功
- 成功 访问5601 端口(kibana默认的,修改的话需要打开相应的注释,设置成自己的端口 ,修改的就是yml文件,而且需要将host改为0.0.0.0 这样自己本机起的服务,才可以远程访问到。)
- 成功 访问5601 端口(kibana默认的,修改的话需要打开相应的注释,设置成自己的端口 ,修改的就是yml文件,而且需要将host改为0.0.0.0 这样自己本机起的服务,才可以远程访问到。)