话不多说 至于关于ELK的相关知识可以自行百度,这里只说如何搭建。阐述自己搭建的过程,有什么问题可以留言一起探讨。
ELK平台搭建
系统环境
System: CentOS Linux release 7.6.1810
ElasticSearch: elasticsearch-2.1.0
Logstash: logstash-2.1.1
Kibana: kibana-7.8.0
Java: jdk-8u212-linux-x64
注:我已经将压缩包传到百度网盘 链接: https://pan.baidu.com/s/1a6-EV9rD060B5g8jvEEYcg 提取码: mqvm 请自行下载
如果想自己下载 下载地址为:https://www.elastic.co/cn/downloads/ 如下图:
1.首先配置ElasticSearch
上传elasticsearch-2.1.0.tar.gz到指定的目录下,执行tar -zxvf elasticsearch-2.1.0.tar.gz 进行解压,跳转到elasticsearch-2.1.0目录下面
安装Head插件(Optional):
./bin/plugin install mobz/elasticsearch-head
编辑es配置文件:vi config/elasticsearch.yml
修改以下配置项:
cluster.name=es_cluster
node.name=node0
path.data=/tmp/elasticsearch/data
path.logs=/tmp/elasticsearch/logs #当前hostname或IP,我这里是centos2
network.host=centos2
network.port=9200
配置完成之后,可以启动ES,但是在启动ES之前需要重新创建一个用户,并将此用户的权限赋予es文件件目录。(es不能用root用户启动,必须是非root用户)
[root@localhost /]# useradd elkuser
#elasticsearch 只能用非 root 启动
[root@localhost /]# chown -R elkuser.elkuser ES目录
启动es:./bin/elasticsearch
可以看到,它跟其他的节点的传输端口为9300,接受HTTP请求的端口为9200。
使用ctrl+C停止。当然,也可以使用后台进程的方式启动ES:
./bin/elasticsearch &
然后可以打开页面localhost:9200,将会看到以下内容:
返回展示了配置的cluster_name和name,以及安装的ES的版本等信息。
刚刚安装的head插件,它是一个用浏览器跟ES集群交互的插件,可以查看集群状态、集群的doc内容、执行搜索和普通的Rest请求等。现在也可以使用它打开localhost:9200/_plugin/head页面来查看ES集群状态
Logstash
Logstash作为一个日志收集器,我们需要为它指定Input和Output(当然Input和Output可以为多个)。由于我们需要把Java代码中Log4j的日志输出到ElasticSearch中,因此这里的Input就是Log4j,而Output就是ElasticSearch。
配置Logstash:
tar -zxvf logstash-2.1.1.tar.gz
cd logstash-2.1.1
编写配置文件(名字和位置可以随意,这里我放在config目录下,取名为log4j_to_es.conf):
mkdir config
vi config/log4j_to_es.conf
输入以下内容:
input {
log4j {
host => "127.0.0.1"
port => 4560
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch{
hosts => ["localhost:9200"]
index => "log4j-%{+YYYY.MM.dd}"
document_type => "log4j_type"
}
}
使用agent来启动它(使用-f指定配置文件):
./bin/logstash agent -f config/log4j_to_es.conf
到这里,我们已经可以使用Logstash来收集日志并保存到ES中了,下面来看看项目代码
Java项目
pom.xml,很简单,只用到了Log4j库:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
log4j.properties,将Log4j的日志输出到SocketAppender,因为官网是这么说的:
log4j.rootLogger=INFO,console
# for package com.demo.elk, log would be sent to socket appender.
log4j.logger.com.demo.elk=DEBUG, socket
# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4560
log4j.appender.socket.RemoteHost=127.0.0.1
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000
# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%l] %m%n
注意:这里的端口号需要跟Logstash监听的端口号一致,这里是4567。
public class Application {
private static final Logger LOGGER = Logger.getLogger(Application.class);
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
LOGGER.info("Info log [" + i + "].");
Thread.sleep(500L);
}
}
}
用Head插件查看ES状态和内容
运行Application.java,先看看console的输出(当然,这个输出只是为了做验证,不输出到console也可以的):
再来看看ES的head页面:
切换到Browser标签:
到此,logstatsh和es整合已经成功。
Kibana
配置Kibana:
tar -zxvf kibana-4.3.0-linux-x86.tar.gz
cd kibana-4.3.0-linux-x86
vi config/kibana.yml
修改以下几项(由于是单机版的,因此host的值也可以使用localhost来代替,这里仅仅作为演示):
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://127.0.0.1:9200"
kibana.index: “.kibana”
启动kibana:
./bin/kibana
用浏览器打开该地址:
为了后续使用Kibana,需要配置至少一个Index名字或者Pattern,它用于在分析时确定ES中的Index。这里我输入之前配置的Index名字applog,Kibana会自动加载该Index下doc的field,并自动选择合适的field用于图标中的时间字段:
点击Create后,可以看到左侧增加了配置的Index名字
接下来切换到Discover标签上,注意右上角是查询的时间范围,如果没有查找到数据,那么你就可能需要调整这个时间范围了,这里我选择Today:
接下来就能看到ES中的数据了:
执行搜索看看呢:
点击右边的保存按钮,保存该查询为search_all_logs。接下来去Visualize页面,点击新建一个柱状图(Vertical Bar Chart),然后选择刚刚保存的查询search_all_logs,之后,Kibana将生成类似于下图的柱状图(只有10条日志,而且是在同一时间段的,比较丑,但足可以说明问题了:) ):
你可以在左边设置图形的各项参数,点击Apply Changes按钮,右边的图形将被更新。同理,其他类型的图形都可以实时更新。
点击右边的保存,保存此图,命名为search_all_logs_visual。接下来切换到Dashboard页面:
单击新建按钮,选择刚刚保存的search_all_logs_visual图形,面板上将展示该图:
如果有较多数据,我们可以根据业务需求和关注点在Dashboard页面添加多个图表:柱形图,折线图,地图,饼图等等。当然,我们可以设置更新频率,让图表自动更新:
如果设置的时间间隔够短,就很趋近于实时分析了。
到这里,ELK平台部署和基本的测试已完成。