服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana
服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana
https://www.cnblogs.com/xishuai/p/elk-elasticsearch-kibana.html
阅读目录:
- ELK Stack 简介
 - 环境准备
 - 安装 Elasticsearch
 - 安装 Kibana
 - Kibana 使用
 - Elasticsearch 命令
最近在开发分布式服务追踪,使用 Spring Cloud Sleuth Zipkin + Stream + RabbitMQ 中间件,默认使用内存存储数据,但这样应用于生产环境,就不太合适了。 
最终我采用的方案:服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana。
这篇文章主要记录 Elasticsearch 和 Kibana 环境的配置,以及采集服务追踪数据的显出处理。
- ELK Stack 简介
ELK 是三个开源软件的缩写,分别为:Elasticsearch、Logstash 以及 Kibana,它们都是开源软件。不过现在还新增了一个 Beats,它是一个轻量级的日志收集处理工具(Agent),Beats 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具,目前由于原本的 ELK Stack 成员中加入了 Beats 工具所以已改名为 Elastic Stack。 
根据 Google Trend 的信息显示,Elastic Stack 已经成为目前最流行的集中式日志解决方案。
Elastic Stack 包含:
Elasticsearch 是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。详细可参考 Elasticsearch 权威指南
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为 c/s 架构,client 端安装在需要收集日志的主机上,server 端负责将收到的各节点日志进行过滤、修改等操作在一并发往 Elasticsearch 上去。
Kibana 也是一个开源和免费的工具,Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Beats 在这里是一个轻量级日志采集器,其实 Beats 家族有 6 个成员,早期的 ELK 架构中使用 Logstash 收集、解析日志,但是 Logstash 对内存、cpu、io 等资源消耗比较高。相比 Logstash,Beats 所占系统的 CPU 和内存几乎可以忽略不计。
ELK Stack (5.0版本之后)--> Elastic Stack == (ELK Stack + Beats)。
目前 Beats 包含六种工具:
Packetbeat: 网络数据(收集网络流量数据)
Metricbeat: 指标(收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
Filebeat: 日志文件(收集文件数据)
Winlogbeat: windows 事件日志(收集 Windows 事件日志数据)
Auditbeat:审计数据(收集审计日志)
Heartbeat:运行时间监控(收集系统运行时的数据)
ELK 简单架构图:
- 环境准备
服务器环境:Centos 7.0(目前单机,后续再部署集群) 
Elasticsearch 和 Logstash 需要 Java 环境,Elasticsearch 推荐的版本为 Java 8,安装教程:确定稳定的 Spring Cloud 相关环境版本
另外,我们需要修改下服务器主机信息:
[root@node1 ~]# vi /etc/hostname
node1
[root@node1 ~]# vi /etc/hosts
192.168.0.11 node1
127.0.0.1 node1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 node1 localhost localhost.localdomain localhost6 localhost6.localdomain6
注意:我之前安装 Elasticsearch 和 Kibana 都是最新版本(6.x),但和 Spring Cloud 集成有些问题,所以就采用了 5.x 版本(具体 5.6.9 版本)
- 安装 Elasticsearch
运行以下命令将 Elasticsearch 公共 GPG 密钥导入 rpm: 
[root@node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
在/etc/yum.repos.d/目录中,创建一个名为elasticsearch.repo的文件,添加下面配置:
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Elasticsearch 源创建完成之后,通过 makecache 查看源是否可用,然后通过 yum 安装 Elasticsearch:
[root@node1 ~]# yum makecache && yum install elasticsearch -y
修改配置(启动地址和端口):
[root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml
network.host: node1 # 默认localhost,自定义为ip
http.port: 9200
要将 Elasticsearch 配置为在系统引导时自动启动,运行以下命令:
[root@node1 ~]# sudo /bin/systemctl daemon-reload
[root@node1 ~]# sudo /bin/systemctl enable elasticsearch.service
Elasticsearch 可以按如下方式启动和停止:
[root@node1 ~]# sudo systemctl start elasticsearch.service
[root@node1 ~]# sudo systemctl stop elasticsearch.service
列出 Elasticsearch 服务的日志:
[root@node1 ~]# sudo journalctl --unit elasticsearch
-- Logs begin at 三 2018-05-09 10:13:46 CEST, end at 三 2018-05-09 10:53:53 CEST. --
5月 09 10:53:43 node1 systemd[1]: [/usr/lib/systemd/system/elasticsearch.service:8] Unknown lvalue 'RuntimeDirectory' in section 'Service'
5月 09 10:53:43 node1 systemd[1]: [/usr/lib/systemd/system/elasticsearch.service:8] Unknown lvalue 'RuntimeDirectory' in section 'Service'
5月 09 10:53:48 node1 systemd[1]: Starting Elasticsearch...
5月 09 10:53:48 node1 systemd[1]: Started Elasticsearch.
5月 09 10:53:48 node1 elasticsearch[2908]: which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
5月 09 10:53:48 node1 elasticsearch[2908]: could not find java; set JAVA_HOME or ensure java is in PATH
5月 09 10:53:48 node1 systemd[1]: elasticsearch.service: main process exited, code=exited, status=1/FAILURE
5月 09 10:53:48 node1 systemd[1]: Unit elasticsearch.service entered failed state.
出现了错误,具体信息是未找到JAVA_HOME环境变量,但我们明明已经配置过了。
解决方式(参考资料:https://segmentfault.com/q/1010000004715131):
[root@node1 ~]# vi /etc/sysconfig/elasticsearch
JAVA_HOME=/usr/local/java
重新启动:
sudo systemctl restart elasticsearch.service
或者通过systemctl命令,查看 Elasticsearch 启动状态:
[root@node1 ~]# systemctl status elasticsearch.service
elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled)
Active: active (running) since 一 2018-05-14 05:13:45 CEST; 4h 5min ago
Docs: http://www.elastic.co
Process: 951 ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec (code=exited, status=0/SUCCESS)
Main PID: 953 (java)
CGroup: /system.slice/elasticsearch.service
└─953 /usr/local/java/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingO...
5月 14 05:13:45 node1 systemd[1]: Started Elasticsearch.
发现 Elasticsearch 已经成功启动。
查看 Elasticsearch 信息:
[root@node1 ~]# curl -XGET 'http://node1:9200/?pretty'
{
"name" : "AKmrtMm",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "r7lG3UBXQ-uTLHInJxbOJA",
"version" : {
"number" : "5.6.9",
"build_hash" : "877a590",
"build_date" : "2018-04-12T16:25:14.838Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}
- 安装 Kibana
运行以下命令将 Elasticsearch 公共 GPG 密钥导入 rpm: 
[root@node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
在/etc/yum.repos.d/目录中,创建一个名为kibana.repo的文件,添加下面配置:
[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
安装 Kibana:
[root@node1 ~]# yum makecache && yum install kibana -y
修改配置(地址和端口,以及 Elasticsearch 的地址,注意server.host只能填写服务器的 IP 地址):
[root@node1 ~]# vi /etc/kibana/kibana.yml
Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601
Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
The default is 'localhost', which usually means remote machines will not be able to connect.
To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "192.168.0.11"
The Kibana server's name. This is used for display purposes.
server.name: "kibana-server"
The URL of the Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://node1:9200"
配置kibana的日志文件路径,不然默认是messages里记录日志
logging.dest: /var/log/kibana.log
创建日志文件:
[root@node1 ~]# touch /var/log/kibana.log; chmod 777 /var/log/kibana.log
要将 Kibana 配置为在系统引导时自动启动,运行以下命令:
[root@node1 ~]# sudo /bin/systemctl daemon-reload
[root@node1 ~]# sudo /bin/systemctl enable kibana.service
Kibana 可以如下启动和停止
[root@node1 ~]# sudo systemctl start kibana.service
[root@node1 ~]# sudo systemctl stop kibana.service
查看启动日志:
[root@node1 ~]# sudo journalctl --unit kibana
5月 09 11:14:48 node1 systemd[1]: Starting Kibana...
5月 09 11:14:48 node1 systemd[1]: Started Kibana.
然后浏览器访问:http://node1:5601
初次使用时,会让你配置一个默认的 index,也就是你至少需要关联一个 Elasticsearch 里的 Index,可以使用 pattern 正则匹配。
注意:如果 Elasticsearch 中没有数据的话,你是无法创建 Index 的。
如果 Spring Cloud Sleuth Zipkin + Stream + RabbitMQ 配置正确的话(以后再详细说明),服务追踪的数据就已经存储在 Elasticsearch 中了。
- Kibana 使用
创建zipkin:索引(匹配后面所有字符): 
然后就可以查看服务追踪的数据了:
也可以创建自定义仪表盘:
- Elasticsearch 命令
创建索引: 
$ curl -XPUT 'http://node1:9200/twitter'
查看 Index 索引列表:
$ curl -XGET http://node1:9200/_cat/indices
yellow open twitter k1KnzWyYRDeckjt7GASh8w 5 1 1 0 5.1kb 5.1kb
yellow open .kibana 8zJGQkq8TwC4s3JJLMX44g 1 1 1 0 4kb 4kb
yellow open student iZPqPcwrQbifGOfE9DQYvg 5 1 0 0 955b 955b
添加 Document 数据:
$ curl -XPUT 'http://node1:9200/twitter/tweet/1' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}'
获取 Document 数据:
$ curl -XGET 'http://node1:9200/twitter/tweet/1'
{"_index":"twitter","_type":"tweet","_id":"1","_version":1,"found":true,"_source":{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}}%
查询zipkin索引下面的数据:
$ curl -XGET 'http://node1:9200/zipkin:*/_search'
参考资料:
集中式日志系统 ELK 协议栈详解
ELK+Filebeat搭建实时日志分析平台
如何在CentOS 7上安装Elasticsearch,Logstash和Kibana(ELK堆栈)
Spring Cloud Sleuth进阶实战
How To Install Elasticsearch, Logstash, and Kibana (ELK Stack) on CentOS 7
如何在 CentOS 7 上安装 Elastic Stack
搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器(推荐)
搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群(推荐)
服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana的更多相关文章
- 性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据
		
基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据 by:授客 QQ:1033553122 实现功能 测试环境 环境搭建 使用前提 使用方法 运行程序 效果展 ...
 - 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理
		
重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...
 - [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取
		
时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取 http://hbasefly.com/2018/05/02/timeseries-database-7/ 2018年5月2日 ...
 - innodb中一颗B+树能存储多少条数据
		
如图,为B+树组织数据的方式: 实际存储时当然不会每个节点只存3条数据. 以InnoDB引擎为例,简单计算一下一颗B+树可以存放多少行数据. B+树特点:只有叶子节点存储数据,而非叶子节点存放的是用来 ...
 - 基于日志服务的GrowthHacking(1):数据埋点和采集(APP、Web、邮件、短信、二维码埋点技术)
		
数据质量决定运营分析的质量 在上文中,我们介绍了GrowthHacking的整体架构,其中数据采集是整个数据分析的基础,只有有了数据,才能进行有价值的分析:只有高质量的数据,才能驱动高质量的运营分析. ...
 - 从统计局采集最新的省市区镇数据,用js在浏览器中运行 V2
		
本文描述的是对国家统计局于2019-01-31发布的<2018年统计用区划代码和城乡划分代码(截止2018年10月31日)>的采集. 相对于用于和采集2016版.2017版的js代码做了比 ...
 - 分布式处理与大数据平台(RabbitMQ&Celery&Hadoop&Spark&Storm&Elasticsearch)
		
热门的消息队列中间件RabbitMQ,分布式任务处理平台Celery,大数据分布式处理的三大重量级武器:Hadoop.Spark.Storm,以及新一代的数据采集和分析引擎Elasticsearch. ...
 - 【大数据实战】Logstash采集->Kafka->ElasticSearch检索
		
1. Logstash概述 Logstash的官网地址为:https://www.elastic.co/cn/products/logstash,以下是官方对Logstash的描述. Logstash ...
 - 奇点云数据中台技术汇(一) | DataSimba——企业级一站式大数据智能服务平台
		
在这个“数据即资产”的时代,大数据技术和体量都有了前所未有的进步,若企业能有效使用数据,让数据赚钱,这必将成为企业数字化转型升级的有力武器. 奇点云自研的一站式大数据智能服务平台——DataSimba ...
 
随机推荐
- 【mysql学习-2】
			
part-1: USE mysql;CREATE TABLE tb_x(id INT,NAME CHAR(10));INSERT INTO tb_x VALUES(5,"a");S ...
 - djangorestframework怎么这么好用!
			
一年前就已经用过restframework, 当时觉得这个只是给web框架打辅助的, 他能实现的我也都实现(可能没有那么好用, 嘿嘿) 但是我有一种东西叫做效率, 时间就是金钱, 别人造好的就直接用就 ...
 - Logistic Regression学习笔记
			
1.李航<统计学习方法>: 2.https://blog.csdn.net/laobai1015/article/details/78113214 3.http://www.cnblogs ...
 - JS正则表达式笔记
			
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 正则 描述 ...
 - MySQL基础复习
			
三范式定义 1NF:每个数据项都是最小单元,不可分割,其实就是确定行列之后只能对应一个数据. 2NF:每一个非主属性完全依赖于候选码(属性组的值能唯一的标识一个元组,但是其子集不可以). 3NF: ...
 - struts2官方 中文教程 系列六:表单验证
			
先贴个本帖的地址,以免被爬:struts2教程 官方系列六:表单验证 即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 介 ...
 - Mac系统下安装Homebrew后无法使用brew命令,-bash: brew: command not found
			
使用如下命令: sudo vim .bash_profile 然后输入以下代码: export PATH=/usr/local/bin:$PATH 再使用以下命令使配置生效: source .bash ...
 - cloudera manager服务迁移(scm数据库在postgresql上,其他amon,rman,oozie,metastore等在mysql上)
			
公司线上大数据集群,之前用的是公有云主机,现在换成了自己idc机房机器,需要服务迁移,已下为测试: 1.备份原postgresql数据库: pg_dump -U scm scm > scm.sq ...
 - 使用maven插件生成grpc所需要的Java代码
			
1.首先需要编写自己需要的.proto文件,本文重点不在这里,.proto可以参考grpc官方例子 https://grpc.io/docs/quickstart/java.html 2.创建自己的J ...
 - vuex的使用及持久化state的方式详解
			
vuex的使用及持久化state的方式详解 转载 更新时间:2018年01月23日 09:09:37 作者:baby格鲁特 我要评论 这篇文章主要介绍了vuex的使用及持久化state的方 ...