基于腾讯云服务器安装ELK

简介

ELK=elasticsearch+logstash+kibana, 常作为大型分布式系统的日志分析收集处理的解决方案

  • ElasticSearch是一个基于Lucene的搜索服务器. 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,是一种流行的企业级搜索引擎.
  • logstash是一个用于日志搜集, 分析, 过滤的工具. client端一般部署在用于搜集日志的主机上, server端负责将接收的到日志进行过滤, 然后转发到elasticsearch上.
  • kibana是一个用于汇总分析和搜索日志的工具, 可以为elasticsearch和logstash提供友好的日志分析的web界面.

搭建

搭建前提

  • 腾讯云服务器 or 其它类型的服务器
  • 安装Docker服务 ( 点击查看详细安装步骤 )
  • 在防火墙以及安全组中开放5044, 9200, 5601端口

搭建步骤

服务器配置

1. 设置能够打开的最大文件数

vi /etc/security/limits.conf 增加下述内容。

  • * soft nofile 65536
  • * hard nofile 65536

2. 设置es 启动时的线程池最低容量

vi /etc/security/limits.d/20-nproc.conf , 修改下述内容(如果被注释掉了请放开, 非常重要! )

  • * soft nproc 4096
  • root soft nproc unlimited

3. 设置一个进程可以拥有的VMA(虚拟内存区域)的数量

vi /etc/sysctl.conf 新增下述内容

  • vm.max_map_count=655360

使用命令,让 sysctl 配置生效 sysctl -p

安装配置ELK镜像

1. Docker安装ELK镜像

  • docker pull sebp/elk:latest

注意: 如何查看docker版本? 只需进入Ddcoker Hub官网, 搜索你需要下载的镜像(图1), 在Tag页找到你需要下载的版本(图2)即可

图1
图2

2. 运行elk镜像

  • docker run -d \\
  • -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \\
  • -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 -it \\
  • --restart=always --name elk2 1f1020bb13d6
  • 注意:
  • 1.根据自己的服务器内存大小分配合适的内存, 这里为期分配了256m的内存(1核2G参考配置)
  • 2. -p用于对需要使用的端口, 在docker容器和服务器端口之间进行映射
  • 3. --restart=always 可以让docker镜像生成的容器实例开机自启( 只要docker服务启动 )
  • 4. 1f1020bb13d6 指的是elk的镜像ID, 可以通过 docker images 命令查看镜像ID

3. 查看elk容器启动日志

如果没有错误则可以测试elasticsearch和kibana能否访问

  • # 查看日志
  • docker logs -f -t elk
  • # 查看elasticsearch
  • http://服务器ip:9200
  • # 查看kibana
  • http://服务器ip:5601
查看elasticsearch
查看kibana

4. 修改logstash配置

  • # 进入容器
  • docker exec -it elk /bin/bash
  • # 编辑配置文件
  • vim /etc/logstash/conf.d/02-beats-input.conf

配置文件修改内容

指定5044作为server端的端口, 输出到本地的elasticsearch上, 添加日志的index(方便在kibana上面找到相应日志)

  • input {
  • tcp {
  • port => 5044
  • codec => json_lines
  • }
  • }
  • output{
  • elasticsearch {
  • hosts => ["localhost:9200"]
  • index => "rizhi-log-%{+YYYY.MM.dd}"
  • }
  • }

5. 退出容器内部, 并重启容器

  • # 退出容器内部
  • ctrl + p + q (ctrl按住的状态下先按p再按q)
  • # 重启容器
  • docker restart elk

再次测试elasticsearch和kibana能否访问

项目整合

1. 在任意一个Springboot项目中添加logstash插件

  • <dependency>
  • <groupId>net.logstash.logback</groupId>
  • <artifactId>logstash-logback-encoder</artifactId>
  • <version>6.1</version>
  • </dependency>

2. 在resource目录下新建一个 lockback.xml 的文件, 用于规定日志格式以及logstash的server端配置

lockback.xml

具体配置

  • <?xml version="1.0" encoding="UTF-8"?>
  • <configuration>
  • <contextName>ProviderLog</contextName>
  • <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
  • <!--本工程中没使用文件输出日志,只用了console和logstash,此处配置无用-->
  • <property name="LOG_HOME" value="home" />
  • <!--可以手动指定log名字-->
  • <property name="appName" value="wdnmdService" />
  • <!--也可以使用工程的名字-->
  • <springProperty scope="context" name="springAppName" source="spring.application.name"/>
  • <springProperty scope="context" name="serverPort" source="server.port"/>
  • <!-- logstash远程日志配置-->
  • <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
  • <destination>logstash所在服务器ip:5044</destination>
  • <!-- 默认是JSON格式,所以logstash中应该配置codec为json_lines-->
  • <!-- LoggingEventCompositeJsonEncoder是LogstashEncoder的父类,可以使用pattern自定义json的关键字
  • -->
  • <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder" >
  • <!-- <encoder class="net.logstash.logback.encoder.LogstashEncoder" >-->
  • <providers>
  • <!--可以配合LogstashEncoder使用-->
  • <!-- <timestamp/>-->
  • <!-- <version/>-->
  • <!-- <message/>-->
  • <!-- <loggerName/>-->
  • <!-- <threadName/>-->
  • <!-- <logLevel/>-->
  • <!-- <callerData/>-->
  • <timestamp>
  • <timeZone>UTC</timeZone>
  • </timestamp>
  • <pattern>
  • <pattern>
  • <!--或者使用"app": "${appName}",-->
  • <!-- 都是sleuth的,本处没用到-->
  • <!-- "trace": "%X{X-B3-TraceId:-}",-->
  • <!-- "span": "%X{X-B3-SpanId:-}",-->
  • <!-- "parent": "%X{X-B3-ParentSpanId:-}",-->
  • <!-- "stack_trace": "%exception{10},"-->
  • {
  • "app": "${springAppName}_${serverPort}",
  • "level": "%level",
  • "thread": "%thread",
  • "class": "%logger{40}",
  • "message": "%message"
  • }
  • </pattern>
  • </pattern>
  • </providers>
  • </encoder>
  • </appender>
  • <!-- 控制台输出 -->
  • <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  • <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  • <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  • <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  • </encoder>
  • </appender>
  • <!-- 按照每天生成日志文件 -->
  • <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  • <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  • <!--日志文件输出的文件名-->
  • <FileNamePattern>${LOG_HOME}/system.log.%d{yyyy-MM-dd}.log</FileNamePattern>
  • <!--日志文件保留天数-->
  • <MaxHistory>30</MaxHistory>
  • </rollingPolicy>
  • <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  • <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  • <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  • </encoder>
  • <!--日志文件最大的大小-->
  • <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  • <MaxFileSize>10MB</MaxFileSize>
  • </triggeringPolicy>
  • </appender>
  • <!-- 日志输出级别 -->
  • <root level="INFO">
  • <appender-ref ref="stash" />
  • <appender-ref ref="STDOUT" />
  • <!-- <appender-ref ref="FILE" />-->
  • </root>
  • </configuration>
展开

3. 在springboot启动类编写测试用接口, 并启动项目, 访问接口 http://localhost:8080/test/测试elk用户

  • @SpringBootApplication
  • @RestController
  • public class DemoApplication {
  • public static void main(String[] args) {
  • SpringApplication.run(DemoApplication.class, args);
  • }
  • Logger logger = LoggerFactory.getLogger("DemoApplication");
  • @RequestMapping("/test/{name}")
  • public String test1(@PathVariable String name){
  • logger.info("用户名称注册成功66666, 用户名为: " +name);
  • return name+"登录成功";
  • }
  • }
localhost:8080/test/测试elk用户

kibana查看日志

1. 登录kibana, 进入kiban中的management页面,创建索引, 用于接收指定格式日志名称的日志

kiban中的management页面
创建日志索引

2. 输入rizhi-log-*去匹配( 会匹配所有以rizhi-log- 开头的日志 ),然后点击下一步,选择@timestamp

创建日志索引过滤格式
选择@timestamp进行全局时间过滤

3. 如果出现You'll need to index some data into Elasticsearch before you can create an index pattern或者输入后下一步为灰或者出现No results match your search criteria,这是因为里面没有数据导致的,在命令行输入一个假的数据即可

  • curl -H "Content-Type: application/json" -XPOST 'http://es所在主机ip:9200/rizhi-log-2021-01-09/test-log' -d '{"code":200,"message":"测试"}'

4. 在kibana的web界面中的discover下查看生成的日志

在Descover下查看实时日志

参考博客

https://zhuanlan.zhihu.com/p/107346014?from_voters_page=true

https://www.cnblogs.com/xiao987334176/p/13565790.html

https://blog.csdn.net/abc8125/article/details/106858862

https://blog.csdn.net/github_38924695/article/details/105348442

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
<<上一篇
下一篇>>