微服务下,使用ELK做日志收集及分析
一、使用背景
目前项目中,采用的是微服务框架,对于日志,采用的是logback的配置,每个微服务的日志,都是通过File的方式存储在部署的机器上,但是由于日志比较分散,想要检查各个微服务是否有报错信息,需要挨个服务去排查,比较麻烦。所以希望通过对日志进行聚合,然后通过监控,能够快速的找到各个微服务的报错信息,快速的排查。
二、ELK分析
对于ELK,主要是分为Elastic Search、Logstash和Kibana三部分:其中Logstash作为日志的汇聚,可以通过input、filter、output三部分,把日志收集、过滤、输出到Elastic Search中(也可以输出到文件或其他载体);Elastic Search作为开源的分布式引擎,提供了搜集、分析、存储数据的功能,采用的是restful接口的风格;Kibana则是作为Elastic Search分析数据的页面展示,可以进行对日志的分析、汇总、监控和搜索日志用。
本次使用ELK主要则是作为日志分析场景。
三、ELK部署
1、Elastic Search安装
本次部署的目录为【/data/deploy/elk】下,首先需要下载,下载命令为:
- # cd /data/deploy/elk
- # wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
解压到当前目录:
- # tar -zxvf elasticsearch-6.4.3.tar.gz
相关配置:
- # cd elasticsearch-6.4.3/config
- # vim elasticsearch.yml
- -- 增加如下内容:
- network.host: 0.0.0.0
- http.port: 9200
- http.cors.enabled: true
- http.cors.allow-origin: "*"
Elastic Search启动:由于ES的启动不能用root账号直接启动,需要新创建用户,然后切换新用户去启动,执行命令如下:
- -- 创建新用户及授权
- # groupadd elsearch
- # useradd elsearch -g elsearch -p elasticsearch
- # cd /data/deploy/elk/
- # chown -R elsearch:elsearch elasticsearch-6.4.3
- -- 切换用户,启动
- # su elsearch
- # cd elasticsearch-6.4.3/bin
- # sh elasticsearch &
启动过程中,会出现一些报错信息,如:
1、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
2、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决问题(1):将当前用户的软硬限制调大。
- # vim /etc/security/limits.conf
- -- 在后面增加一下配置后,保存退出
- es soft nofile 65535
- es hard nofile 65537
- -- 不需要重启,重新登录即生效
- -- 查看修改命名是否生效
- # ulimit -n 65535
- # ulimit -n
- -- 结果65535
- # ulimit -H -n 65537
- # ulimit -H -n
- -- 结果65537
解决问题(2):调大elasticsearch用户拥有的内存权限
- -- 切换到root用户
- # sysctl -w vm.max_map_count=262144
- -- 查看修改结果
- # sysctl -a|grep vm.max_map_count
- -- 结果显示:vm.max_map_count = 262144
- -- 永久生效设置
- # vim /etc/sysctl.conf
- -- 在文件最后增加以下内容,保存后退出:
- vm.max_map_count=262144
解决以上问题后,再次启动:
- # su - elsearch
- # cd /data/deploy/elk/elasticsearch-6.4.3/bin/
- # sh elasticsearch &
启动成功后,访问:http://ip:9200,可以有json格式的返回信息,判断安装成功。
2、Kibana的安装
下载安装包:
- -- 切换到root用户
- # su
- -- 下载
- # cd /data/deploy/elk/
- # wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.2-linux-x86_64.tar.gz
解压配置:
- # tar -zxvf kibana-6.4.2-linux-x86_64.tar.gz
- # cd kibana-6.4.2-linux-x86_64/config/
- # vim kibana.yml
- -- 增加如下配置:
- server.port: 5601
- server.host: "0.0.0.0"
- elasticsearch.url: "http://localhost:9200"
- kibana.index: ".kibana"
启动Kibana:
- # cd /data/deploy/elk/kibana-6.4.2-linux-x86_64/bin
- # sh kibana &
启动成功后,访问http://ip:5601,查看是否启动成功。
3、Logstash安装
下载安装包:
- -- 切换到root账号
- # su
- # cd /data/deploy/elk
- # wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz
解压配置:
- # tar -zxvf logstash-6.4.2.tar.gz
- # cd logstash-6.4.2/bin
- -- 新增编辑配置文件
- # vim logstash.conf
- -- 增加以下内容:
- input {
- tcp {
- port => 5044
- codec => json_lines
- }
- }
- output {
- elasticsearch {
- hosts => ["localhost:9200"]
- }
- }
启动Logstash:
- # cd /data/deploy/elk/logstash-6.4.2/bin
- # nohup sh logstash -f logstash.conf &
查看日志,无报错信息,默认启动成功。
四、微服务配置
在微服务中,需要两步操作:
1、pom.xml文件增加依赖
- <dependency>
- <groupId>net.logstash.logback</groupId>
- <artifactId>logstash-logback-encoder</artifactId>
- <version>5.1</version>
- </dependency>
2、修改logback.xml配置文件
- -- 新增appender
- <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
- <destination>192.168.11.199:5044</destination>
- <queueSize>1048576</queueSize>
- <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
- <providers>
- <timestamp>
- <timeZone>UTC</timeZone>
- </timestamp>
- <pattern>
- <pattern>
- {
- "severity":"%level",
- "service": "%contextName",
- "pid": "${PID:-}",
- "thread": "%thread",
- "class": "%logger{40}",
- "rest": "%message->%ex{full}"
- }
- </pattern>
- </pattern>
- </providers>
- </encoder>
- </appender>
- -- <root>节点中,增加:
- <appender-ref ref="LOGSTASH" />
五、Kibana的使用
通过以上的配置,基本上ELK和微服务之间,已经配置完成,接下来需要通过在Kibana中创建索引等进行日志的搜索和查看。
1、创建索引
可以新建一个全局的索引,【Index pattern】设置为【*】,点击下一步至完成为止。
2、日志搜索
如截图所示,可以通过Discover和新建的索引,对日志进行详细的查看,并且可以选择具体的字段进行查看。在右上角,可以通过选择不同的时间段,对日志进行查看和搜索。
3、创建查询
如2中截图所示,可以通过添加filter,对日志进行过滤查询。然后点击Save后,可以创建新的查询。
4、创建Visualize和Dashboard
创建完查询后,可以在Visualize中,创建一个新的图示,通过查询进行创建。创建Dashboard,依赖Visualize图示,进行展示。
即依赖关系:Dashboard -》 Visualize -》 Search
在本项目中,Search主要是通过增加了两个Filter:①service:“ff-watersource” ②severity:“ERROR”,查询的是微服务为ff-watersource的error级别的日志。然后根据本Search,依次创建Visualize和Dashboard,最终在Dashboard中,可以监控日志信息的页面为:
以上,日志聚合分析的实现,就算完成了。
微服务下,使用ELK做日志收集及分析的更多相关文章
- Linux下单机部署ELK日志收集、分析环境
一.ELK简介 ELK是elastic 公司旗下三款产品ElasticSearch .Logstash .Kibana的首字母组合,主要用于日志收集.分析与报表展示. ELK Stack包含:Elas ...
- AspNetCore微服务下的网关-Kong(一)
Kong是Mashape开源的高性能高可用API网关和API服务管理层.它基于OpenResty,进行API管理,并提供了插件实现API的AOP.Kong在Mashape 管理了超过15,000 个A ...
- 通过k8s部署dubbo微服务并接入ELK架构
需要这样一套日志收集.分析的系统: 收集 -- 能够采集多种来源的日志数据 (流式日志收集器) 传输 -- 能够稳定的把日志数据传输到中央系统 (消息队列) 存储 -- 可以将日志以结构化数据的形式存 ...
- StringBoot整合ELK实现日志收集和搜索自动补全功能(详细图文教程)
@ 目录 StringBoot整合ELK实现日志收集和搜索自动补全功能(详细图文教程) 一.下载ELK的安装包上传并解压 1.Elasticsearch下载 2.Logstash下载 3.Kibana ...
- 微服务下的契约测试(CDC)解读
1. 前言 有近两周没有在公众号中发表文章了,看过我之前公众号的读者都知道,公众号中近期在连载<RobotFramework接口自动化系列课程>,原本计划每周更新一篇,最近由于博主在带一个 ...
- ELK分布式日志收集搭建和使用
大型系统分布式日志采集系统ELK全框架 SpringBootSecurity1.传统系统日志收集的问题2.Logstash操作工作原理3.分布式日志收集ELK原理4.Elasticsearch+Log ...
- 探索解析微服务下的RabbitMQ
概览 本文主要介绍如何使用RabbitMQ消息代理来实现分布式系统之间的通信,从而促进微服务的松耦合. RabbitMQ,也被称为开源消息代理,它支持多种消息协议,并且可以部署在分布式系统上.它轻量级 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-2.微服务下登录检验解决方案 JWT讲解
笔记 2.微服务下登录检验解决方案 JWT讲解 简介:微服务下登录检验解决方案 JWT讲解 json wen token 1.JWT 是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计
笔记 4.微服务下电商项目基础模块设计 简介:微服务下电商项目基础模块设计 分离几个模块,课程围绕这个基础项目进行学习 小而精的方式学习微服务 1.用户服务 ...
随机推荐
- js在HTML中的三种写法
1.内联样式 内联样式分为两种,一是直接写入元素的标签内部 <html> <title>js样式内联写法</title> <meta http-equiv=& ...
- noip模拟赛 集合
分析:感觉像是贪心,再看数据范围这么大,肯定是贪心没错.但是要怎么贪呢?主要的思想是让每次往上加的数尽量多,肯定要先把0分裂,如果能正好一起跳到最终状态就好.举个例子:5,3,2,1,最大值比次大值大 ...
- [NOIP2005] 提高组 洛谷P1054 等价表达式
题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数 ...
- 【BZOJ4403】序列统计(Lucas定理,组合计数)
题意:给定三个正整数N.L和R, 统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量. 输出答案对10^6+3取模的结果. 对于100%的数据,1≤N,L,R≤10^9,1≤T≤100, ...
- mysql用户自定义变量
可以先在用户变量中保存值然后在以后引用它:这样可以将值从一个语句传递到另一个语句.用户变量与连接有关.也就是说,一个客户端定义的变量不能被其它客户端看到或使用.当客户端退出时,该客户端连接的所有变量将 ...
- set(集合)数据类型【七】
一.概述:(类似于Java的Set,不允许有重复元素) 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存 ...
- Nginx教程收集
学习要系统,最推荐的方式是看书. 下面是收集的一些Nginx教程: https://www.gitbook.com/book/yinsigan/nginx/details http://www.ngi ...
- 如何探测浏览器是否开启js功能
<body> ... ... <script type="text/javascript"> <!-- document.write("He ...
- Struts2.3动态调用报 No result defined for action 错误
struts 2.3.16 採用动态调用发现不工作报404 not found,网上查找原因: 1.由于:struts2中默认不同意使用DMI 所以:须要在配置文件里打开: <constant ...
- hdu4057 Rescue the Rabbit(AC自己主动机+DP)
Rescue the Rabbit Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...