ELK Stack 是Elasticsearch、Logstash、Kiban三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于 Elastic.co 公司名下,故有此简称。
注:会消耗2G+服务器内存
#1.新建elk文件夹 mkdir elk #2.进入文件夹 cd elk #3.创建 docker-compose.yml 文件并填入下文内容 vim docker-compose.yml #4.新建文件及文件夹对应 docker-compose 的挂载目录 mkdir es cd es mkdir plugins mkdir data #5.给设置data文件夹设置777权限 不然es启动会报错 chmod 777 data/ cd .. mkdir logstash cd logstash/ #6.创建 logstash.conf 文件并填入下文内容 vim logstash.conf #7.通过命令启动docker容器 docker-compose up -d #通过命令查看elk的状态 docker psdocker ps内容
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0784ecdcc5d logstash:7.8.0 "/usr/local/bin/dock…" 22 seconds ago Up 21 seconds 5044/tcp, 0.0.0.0:4560->4560/tcp, 9600/tcp logstash 8eb6c197b6f4 kibana:7.8.0 "/usr/local/bin/dumb…" 22 seconds ago Up 21 seconds 0.0.0.0:5601->5601/tcp kibana f266b48803a9 elasticsearch:7.8.0 "/tini -- /usr/local…" 22 seconds ago Up 21 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch可以看到三个都已启动
访问http://服务器ip:9200/可以看到以下 json 字符串
{ "name": "f266b48803a9", "cluster_name": "elasticsearch", "cluster_uuid": "yWdlWaN8RbOTuMZBJ7RRMg", "version": { "number": "7.8.0", "build_flavor": "default", "build_type": "docker", "build_hash": "757314695644ea9a1dc2fecd26d1a43856725e65", "build_date": "2020-06-14T19:35:50.234439Z", "build_snapshot": false, "lucene_version": "8.5.1", "minimum_wire_compatibility_version": "6.8.0", "minimum_index_compatibility_version": "6.0.0-beta1" }, "tagline": "You Know, for Search" }访问http://服务器ip:5601/查看Kibana状况
如需修改Kibana为中文,则执行以下命令
#进入kibana容器 docker exec -it kibana bash #切换进入 config 目录 cd config/ #编辑 kibana.yml 文件 vi kibana.yml #在文件的最后添加一行 i18n.locale: "zh-CN" #退出容器 exit #重启kibana容器 docker restart kibana再次访问http://服务器ip:5601/就可以看到界面变中文了
至此 ELK基于docker搭建完成
在spring boot 项目中引入依赖
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.3</version> </dependency>在resource目录中新建logback-spring文件 用于收集日志并将日志转发到logstash
注:要修改服务器ip
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!--应用名称--> <springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="springBoot"/> <!--LogStash访问host--> <springProperty name="LOG_STASH_HOST" scope="context" source="logstash.host" defaultValue="服务器ip"/> <!-- 控制台输出日志 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%level] [%c:%L] - %msg%n</pattern> </encoder> </appender> <!--每天生成一个日志文件,保存30天的日志文件。--> <appender name="DayFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>logs/log.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/log.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%level] [%thread] [%c:%L] - %msg%n</pattern> </encoder> </appender> <!--业务日志输出到LogStash--> <appender name="LOG_STASH_BUSINESS" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>${LOG_STASH_HOST}:4560</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <timeZone>Asia/Shanghai</timeZone> </timestamp> <!--自定义日志输出格式--> <pattern> <pattern> { "service": "${APP_NAME:-}", "level": "%level", "pid": "${PID:-}", "thread": "%thread", "class": "%logger", "traceId": "%X{traceId:-}", "message": "%message", "stack_trace": "%exception" } </pattern> </pattern> </providers> </encoder> </appender> <!--指定logger name为包名或类全名 指定级别 additivity设置是否传递到root logger --> <logger name="slf4j" level="INFO" additivity="false"> <appender-ref ref="STDOUT"/> <appender-ref ref="DayFile"/> <appender-ref ref="LOG_STASH_BUSINESS"/> </logger> <!--slf4j2包下的类在ERROR级别时候传递到root logger中--> <logger name="slf4j2" level="ERROR"/> <!--根logger控制--> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="DayFile"/> <appender-ref ref="LOG_STASH_BUSINESS"/> </root> </configuration>启动项目输出日志后,logstash就会收集日志
访问http://服务器ip:5601并按如下设置
1.进入Stack Management
2.开始创建索引模式
3.定义索引模式
4.创建索引模式
5.创建完成后 效果如下 6.查看日志
7.可以根据各种条件筛选日志