一背景
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。开源实时日志分析ELK平台能够完美的解决日志收集和日志检索、分析的问题,ELK就是指ElasticSearch、Logstash和Kiabana三个开源工具。
因为ELK是可以跨平台部署,因此非常适用于多平台部署的应用。
二 环境准备
1. 安装JDK1.8环境
2. 下载ELK软件包
- logstash: https://www.elastic.co/cn/downloads/logstash(*.zip)
- elasticsearch:https://www.elastic.co/cn/downloads/elasticsearch
- kibana: https://www.elastic.co/cn/downloads/kibana
三 部署
1.配置logstash
在logstash文件夹的下bin目录创建配置文件logstash.conf ,内容如下:
input{
file{
#日志文件路径
path => ["E:/logs/test/spring.log.2019-07-30.log"]
type => "jing"
start_position =>"beginning"
#设置多长时间扫描目录,发现新文件
discover_interval=> 15
#设置多长时间检测文件是否修改
stat_interval => 1
sincedb_write_interval => 5
}
}
filter{
#定义数据的格式,正则解析日志(根据实际需要对日志日志过滤、收集)
grok {
match => { "message" => "%{MYSELFTIMESTAMP:timestamp} %{LOGLEVEL:log_level} %{NUMBER:bytes} --- %{GREEDYDATA:[@metadata][keyvalue]}"}
}
#根据需要对数据的类型转换
# date {
# match => ["[@metadata][logdate]", "YYYY-MM-dd HH:mm:ss.SSS"]
#
# multiline {
# pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
# negate => true
# what => "previous"
# }
kv {
source => "[@metadata][keyvalue]"
field_split => ","
value_split => ":"
}
}
output{
#if "multiline" in [tags] {
elasticsearch{
hosts => ["localhost:9200"]
index => "logstashs-po8-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
# }
}
修改logstash-7.2.0\vendor\bundle\jruby\2.5.0\gems\logstash-patterns-core-4.1.2\patterns下grok-patterns文件增加
MYSELFTIMESTAMP 20%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})
日志文件格式如下:
2019-07-25 15:25:04.005 INFO 25552 --- user=3|name=图片|Adress=杭州
2019-07-25 15:25:04.005 INFO 25552 --- user=3|name=图片|Adress=杭州
2019-07-25 15:25:04.005 INFO 25552 --- user=3|name=图片|Adress=杭州
在bin目录下创建run.bat,写入一下脚本:
logstash.bat -f logstash.conf
执行run.bat启动logstash。
2. Elasticsearch 集群部署
Elasticsearch默认端口9200,执行bin/elasticsearch.bat即可启动。
a、建如下三个文件夹,master(主),分别把Elasticsearch解压复制三个文件夹中。
b、修改config下面的elasticsearch.yml。master,slave1和slave2分别如下:
http.cors.enabled: true
http.cors.allow-origin: '*'
#端口
http.port: 9200
#集群名称
cluster.name: wali
# 节点名称
node.name: master
node.master: true
#指定自己的ip地址 监听网络
network.host: 127.0.0.1
node.data: true
cluster.name: wali
node.name: slave1
network.host: 127.0.0.1
http.port: 8200
#绑定master节点的ip地址
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
cluster.name: wali
node.name: slave2
network.host: 127.0.0.1
http.port: 8100
#绑定master节点的ip地址
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
c、三个全部启动,
d、通过浏览器访问9200端口,成功。
3.配置kibana
Kibana启动时从文件kibana.yml读取属性。默认设置配置Kibana运行localhost:5601
。要更改主机或端口号,或者连接到在其他机器上运行的Elasticsearch,需要修改kibana.yml
文件。执行bin/kibana.bat启动Kibana。
server.port: 5601
server.host: "localhost"
elasticsearch.hosts: ["http://localhost:9200"]
浏览器访问192.168.17.32:5601 即可
4.安装ElasticSearch的Head插件
es5以上版本安装head需要安装node和grunt(之前的直接用plugin命令即可安装)
- https://nodejs.org/en/download/下载相应系统的msi,双击安装。
- 安装完成用cmd进入安装目录执行 node -v可查看版本号
Microsoft Windows [版本 10.0.17763.615]
(c) 2018 Microsoft Corporation。保留所有权利。
C:\Users\jing>node -v
v10.16.0
- 执行 npm install -g grunt-cli 安装grunt ,安装完成后执行grunt -version查看是否安装成功,会显示安装的版本号
- 开始安装head
a、进入安装目录下的config目录,修改elasticsearch.yml文件.在文件的末尾加入以下代码(修改过就不需要修改)
http.cors.enabled: true
http.cors.allow-origin: '*'
http.port: 9200
cluster.name: wali
node.name: master
node.master: true
#指定自己的ip地址
network.host: 127.0.0.1
node.data: true
b、双击elasticsearch.bat重启es
c、https://github.com/mobz/elasticsearch-head下载head插件,选择下载zip
d、解压到指定文件夹中,修改Gruntfile.js文件 在对应的位置上添加hostname:'*'
connect: {
server: {
options: {
hostname: '*',
port: 9100,
base: '.',
keepalive: true
}
}
}
e、在D:\>cd Program Files (x86)\logstash_elasticsearch_kibana\elasticsearch-head-master 下执行npm install 安装完成后执行grunt server 或者npm run start 运行head插件,如果不成功重新安装grunt。
f、浏览器下访问http://localhost:9100/,成功。