ELK日志采集系统构建实战(十七)
ELK日志采集系统构建实战讲解,让小伙伴更深入的理解ELK。
1
、首先确保服务器已经运行了
ES
集群
2
、确保服务器上已经安装部署了
logstash
3
、在
Logstash
安装路径下的
config
目录中,新建一个
conf
文件,取名为 es_log.conf,并且填入以下内容:
input {
file {
path => "/home/elk/elk/teaching/elasticsearch-7.7.0/logs/my-elk.log"
start_position => "beginning"
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
}
}
}
output {
elasticsearch {
hosts => ["http://172.18.194.140:9200"]
index => "es-log-%{+YYYY.MM.dd}"
}
stdout{}
}
4
、进入
Logstash
的
bin
目录执行 ./logstash -f ../config/es_log.conf
5
、控制台会输出:
6
、我们到浏览器查询:
发现
ES
中确实创建了一个索引
es-log-2020.07.08
7
、在
ES
中查询这个索引的内容
8
、仔细检查存入的日志内容,发现日志信息是作为整体存入
message
字 段的:
有没有办法存入的更细粒些呢?
9
、仔细分析
es
的日志,呈现了一定的结构化特征:
总是: “
[
时间戳
][
日志级别
][
输出信息的类名
][
节点名
]
具体的日志信息 ”这种格式,所以我们完全可以考虑使用过滤器插件对文本进行分析后再存 入 es
,怎么分析?可以用
grok
过滤器。
10
、 在
Logstash
安装路径下的
config
目录中,新建一个
conf
文件,取名 为 log_grok.conf
,并且填入以下内容:
input {
file {
path => "/home/elk/elk/teaching/elasticsearch-7.7.0/logs/my-elk.log"
start_position => "beginning"
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
}
}
}
filter{
grok {
match => {
message =>
"\[%{TIMESTAMP_ISO8601:time}\]\[%{LOGLEVEL:level}%{SPACE}\]\[%{NOT
SPACE:loggerclass}%{SPACE}\]%{SPACE}\[%{DATA:nodename}\]%{SPACE}
%{GREEDYDATA:msg}"
}
}
}
output {
stdout{}
}
11
、如果担心自己写的
conf
有语法问题,可以执行 ./logstash -f xxxxxxx.conf -t 检查
conf
,当然只能检查语法,不能检查诸如
正则表达式是否正确这类问题。
12
、执行
./logstash -f ../config/log_grok.conf
,如果发现程序没有输出,有 可能是 elk
的日志文件已经被处理过,
logstash
不会重复处理,这时可以到 logstash 的
/data/plugins/inputs/file
目录下,删除
.sincedb
文件(这个文件是个 隐藏文件),再执行。
可以看见,每条日志已经成功的被解析了。
13
、现在考虑如何存入
es
,按照原来的
定义好索引的 mapping(映射),注意要和我们对日志的分解一一对应。
14
、创建一个新的
conf
文件,取名
es_log_grok.conf
,内容如下:
input {
file {
path => "/home/elk/elk/teaching/elasticsearch-7.7.0/logs/my-elk.log"
start_position => "beginning"
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
}
}
}
filter{
grok {
match => {
message =>
"\[%{TIMESTAMP_ISO8601:time}\]\[%{LOGLEVEL:level}%{SPACE}\]\[%{NOT
SPACE:loggerclass}%{SPACE}\]%{SPACE}\[%{DATA:nodename}\]%{SPACE}
%{GREEDYDATA:msg}"
}
}
}
output {
elasticsearch {
hosts => ["http://172.18.194.140:9200"]
index => "es-log-text-%{+YYYY.MM.dd}"
template_name => "es_template*"
template => "/home/elk/elk/teaching/logstash-7.7.0/config"
}
stdout{}
}
主要是在
elasticsearch
插件中增加了对刚才新增的
json
文件的读取。
15
、执行
./logstash -f ../config/es_log_grok.conf
,会看到控制台的输出,同 时在浏览器中,也会看到解析后的日志:
ELK实战demo到此结束,下一篇我们分析es的性能优化策略,敬请期待。