ELK版本:5.5.0
下载:https://www.elastic.co/cn/downloads
这里只介绍环境的搭建,至于简介什么,以后慢慢来吧.
环境:
Ubuntu
JDK 1.8
Linux用户:mungo
首先,ELK工作的原理图:
即:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
配置文件
在elasticsearch的config目录下elasticsearch.yml
# Use a descriptive name for your cluster:
#
cluster.name: my-application
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /home/mungo/elk/data
#
# Path to log files:
#
path.logs: /home/mungo/elk/logs
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
# 这里配置的ip为本机的ip
#
network.host: 10.81.12.46
#
# Set a custom port for HTTP:
#
http.port: 9200
然后到elasticsearch的bin目录下,通过elasticsearch脚本即可启动.
./elasticsearch
通过输出可以看到,elasticsearch发布到了配置文件定义的9200端口.通过上面配置的ip即可访问.
http://10.81.12.46:9200/
通过http://10.81.12.46:9200/_cluster/health可以查看当前elasticsearch服务器的运行状态.比如:
{
"cluster_name": "my-application",
"status": "yellow",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 5,
"active_shards": 5,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 5,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 50
}
其中:status一共有3个状态:green表示所有主分片及备份分片都分配好了,集群100%健康。yellow表示所有主分片都分配好了,但至少有一个备份分片未分配。数据没有丢失,搜索结果时完整的。但高可用性会缺失,存在丢失数据风险,以黄色表示警告。red表示至少有一个主分片未分配,并且这个主分片的所有分片都丢失了。数据已经丢失了,搜索结果不完整,并且往这个分片索引数据会发生异常。
配置文件
在kibana的config目录下kibana.yml
# Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "localhost"
# The URL of the Elasticsearch instance to use for all your queries.
# 这里配置的Elasticsearch的链接地址
elasticsearch.url: "http://10.81.12.46:9200"
# Kibana uses an index in Elasticsearch to store saved searches, visualizations and
# dashboards. Kibana creates a new index if the index doesn't already exist.
kibana.index: ".kibana"
然后通过kibana的bin目录下的kibana启动.
./kibana
通过配置文件可知,kibana监听的是5601端口.所以通过链接
http://localhost:5601启动.
看到这个问题,意思是logstash没有把日志写入到elasticsearch。因为logstash目前还未配置.下面开始配置logstash.如果有配置日志写入,就检查logstash与elasticsearch之间的通讯是否有问题。
Unable to fetch mapping. Do you have indices matching the pattern?
还有就是左侧的菜单可能会有些许不一直,因为我的版本里有先安装了x-pack插件.具体怎么使用如以后会做说明.
Logstash 项目诞生于 2009 年 8 月 2 日。其作者是世界著名的运维工程师乔丹西塞(JordanSissel)。LogStash架构专为收集、分析和存储日志所设计。
Logstash的功能如下:
从上图可以看出,Logstash其实就是一个收集器,使用时需要为它指定Input和Output(Input和Output可以为多个)。比如若把Java代码中Log4j的日志输出到ElasticSearch中,Input就是Log4j,而Output就是ElasticSearch。若通过tcp的读取网络数据到ElasticSearch中,Input就是tcp监听的端口(可以配合 nc 命令导入数据,在启动 logstash 进程后,在另一个终端运行nc ip 监听端口 < olddata即可导入数据:),而Output就是ElasticSearch。
配置文件
配置两个输入,分别是Log4j日志输入和tcp数据输入.输出到ElasticSearch.
配置文件位置可以随意的,这里我放到logstash下的config目录下,取名为logstash_to_es.conf.
# For detail structure of this file
# Set: https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html
input {
# For detail config for log4j as input,
# See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
log4j {
mode => "server"
host => "10.81.12.46"
port => 4567
}
tcp {
port => 8888
mode => "server"
ssl_enable => false
}
}
filter {
#Only matched data are send to output.
}
output {
# For detail config for elasticsearch as output,
# See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
elasticsearch {
action => "index" #The operation on ES
hosts => "10.81.12.46:9200" #ElasticSearch host, can be array.
index => "logstash-%{type}-%{+YYYY.MM.dd}" #The index to write data to.
}
}
关于logstash使用可以通过如下命令查看.
./logstash --help
根据以上配置,通过下面命令启动logstash.
./logstash -f ../config/logstash_to_es.conf
同过输出可以看出,配置input的4567和8888端口都被监听了.
通过nc命令将一个日志文件导入到elasticsearch
nc 127.0.0.1 8888 < log.log
然后在kibana中就可以创建一个Index了.
然后在Discover菜单中就可以看到日志的内容了.就可以对日志内容进行查找了.
Log4j通过logstash写入elasticsearch
在log4j.properties配置文件中增加一项配置,将Log4j的日志输出到SocketAppender:
# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4567
log4j.appender.socket.RemoteHost=10.81.12.46
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000
注意:这里的端口号需要跟Logstash监听的端口号一致,这里是4567。
可以看到,工程的日志已经输入到es了,如果设置的时间间隔够短,就很趋近于实时分析了。
至此,ELK平台部署和基本的测试就完成。