ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
基于Zcloud产品的客户量急剧增长,越来越多的项目需要去进行运维。而运维和开发这一辈子无非就是和问题在战斗。
从现场oncall来看,遇到问题后需要去具体的微服务下进行查找日志信息。假设此时,客户现场不允许频繁连接到环境上去查找日志,那么对于我们排查问题是相当不利的。而本文提到的ELK有以下集中用途。
a.问题排查 kibana提供可视化的界面,日志信息即可在网页上进行日志的查看,更加方便、快速。
b.监控和预警。 日志,监控,预警是相辅相成的。基于日志的监控,预警使得运维有自己的机械战队,大大节省人力以及延长运维的寿命。
**c.开源。**这点对于研发团队来说,当然是最重要的。
d.日志分析
ELK的可视化界面,图形大致如下
此文暂时只涉及最基本的ELK架构,仅仅讨论ELK实施起来的可行性和大体方案,若需要做得更细,后续需要加入更多的组件,比如beats,kafka,redis等等。
此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web方便的对日志查询,并根据数据生成报表。
需要提前准备java环境 es,logstash,kibana
注意:es需要依赖java环境,并且不能使用root用户进行启动
1、创建普通用户,并且使普通用户使用root用户的java环境
2、创建elsearch用户组及elsearch用户
groupadd es
useradd es -g es -p es
3.下载es,注意es版本会跟java版本进行匹配,比如7.5版本的es需要java11才能进行支撑,
我们这里使用6.4.3版本,对应java8
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
解压estar -zxvf elasticsearch-6.4.3.tar.gz
4.配置es
解压后进入config目录:cd elasticsearch-6.4.2/config,vi elasticsearch.yml 修改配置文件,在最下面加入如下几行:
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
5、更改elasticsearch-6.4.3文件夹及内部文件的所属用户及组为es:es
cd切换到elasticsearch-6.4.3的父路径下
chown -R es:es elasticsearch-6.4.2
6.启动es
su elsearch
cd elasticsearch-6.4.2/bin
sh elasticsearch &
7.至此,elasticsearch配置启动完毕,可以在浏览器输入url: 服务器外网ip:9200 查看是否成功启动:
http://192.168.66.141:9200/
{
"name" : "N7mzkEq",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "G9qqwhJRSgmC2vvUWHUTeQ",
"version" : {
"number" : "6.4.3",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "fe40335",
"build_date" : "2018-10-30T23:17:19.084789Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
1、下载安装包
2、解压
3、写配置文件
cd logstash-6.4.3/bin
-- 新增编辑配置文件
# vi logstash.conf
-- 增加以下内容:
input {
tcp {
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["192.168.66.141:9200"]
}
}
4、检查是否配置成功
sh logstash -f logstash.conf - t
5、启动
sh logstash -f logstash.conf &
启动完成后会开启5044 和9600端口
1、kibana下载6.4.3
按照上面的操作,可以先切回root用户了
2、然后cd kibana-6.4.2-linux-x86_64/config/ 进入kibana的配置文件夹
3、vim kibana.yml 编辑配置文件,在最后面加上如下配置就行:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
kibana.index: ".kibana"
4、cd命令进入bin目录
sh kibana & 启动kibana
启动完毕,可以浏览器输入url: 服务器外网ip:5601 查看是否成功启动
1、集成springboot项目
pom.xml文件增加依赖
<dependency>
<groupId>net.logstash.logbackgroupId>
<artifactId>logstash-logback-encoderartifactId>
<version>5.1version>
dependency>
2、修改logback.xml配置文件
新增appender
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.11.199:5044destination>
<queueSize>1048576queueSize>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTCtimeZone>
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" />
l}"
}
- ```java
-- 节点中,增加: