LogStash安装
LogStash 简介
LogStash 日志采集系统构建
1. 创建配置文件
- 在 Logstash 安装路径下的 config 目录中,新建一个 conf 文件,取名为 es_log.conf,并且填入以下内容
input {
file {
path => "/elk/elasticsearch-7.14.0/logs/my-elk.log" # 读取的日志文件
start_position => "beginning" # 从头部读取
codec => multiline { # 多行合并,向以“[”开头的那行文字合并
pattern => "^\["
negate => true
what => "previous"
}
}
}
output {
elasticsearch { # 输出到es中
hosts => ["http://192.168.42.111:9200"] # es地址
index => "es-log-%{+YYYY.MM.dd}" # 生成索引的名称-日期
}
stdout{} # 同时输出到控制台
}
2. 启动LogStash
- 进入 Logstash 的 bin 目录执行
./logstash -f ../config/es_log.conf
3. 查看控制台打印
4. 查看es索引
- 访问
http://192.168.42.111:9200/_cat/indices?v
,创建了当天的索引
5. 查询索引内容
GET /es-log-2022.03.14/_search
6. 细化日志信息
- 这里的日志内容是将日志信息作为整体存入message字段的,需要进一步细化
- 日志的结构是
[时间戳][日志级别][输出信息的类名][节点名]具体的日志信息
- 可以考虑使用 grok 过滤器插件对文本进行分析后再存入 es
7. grok 过滤器
- 在 Logstash 安装路径下的 config 目录中,新建一个 conf 文件,取名为 log_grok.conf,并且填入以下内容
input {
file {
path => "/elk/elasticsearch-7.14.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}\]\[%{NOTSPACE:loggerclass}%{SPACE}\]%{SPACE}\[%{DATA:nodename}\]%{SPACE} %{GREEDYDATA:msg}"
}
}
}
output {
elasticsearch { # 输出到es中
hosts => ["http://192.168.42.111:9200"] # es地址
index => "es-log-text-%{+YYYY.MM.dd}" # 生成索引的名称-日期
template_name => "es_template*" # 模板名称
template => "/elk/elasticsearch-7.14.0/config" # 模板位置
}
stdout{} # 同时输出到控制台
}
“[%{TIMESTAMP_ISO8601:time}][%{LOGLEVEL:level}%{SPACE}][%{NOTSPACE:loggerclass}%{SPACE}]%{SPACE}[%{DATA:nodename}]%{SPACE} %{GREEDYDATA:msg}”
格式就是%{预定义模式:字段名},这个字段名就是es中_source中的映射
- 如果担心自己写的 conf 有语法问题,可以执行
./logstash -f ../config/es_log_grok.conf -t
- 显示下面内容,说明语法没有问题
- 这里除了配置过滤器之外,还要创建一个es的模板文件用于定义索引的 mapping(映射),注意要和对日志的分解一一对应,不然就不能输出到es中
- 默认的logstash模板可以通过下面命令查看
get _template/logstash
8. 创建es模板文件
- 在 config 目录下创建一个 es_template.json
{
"template": "es-log-text-%{+YYYY.MM.dd}",
"settings": {
"index.refresh_interval": "1s"
},
"mappings": {
"properties": {
"time": {
"type": "date"
},
"level": {
"type": "keyword"
},
"loggerclass": {
"type": "keyword"
},
"nodename": {
"type": "keyword"
},
"msg": {
"type": "text"
},
"message": {
"type": "text"
}
}
}
}
9. 启动LogStash
- 启动前先到logstash 的/data/plugins/inputs/file 目录下,删除.sincedb 文件,这个文件是个隐藏文件,需要使用
ls -al
才能显示,删除后再启动。(这个文件记录了之前读取日志的最后位置,导致下次读取时,前面的日志读会取不到)
./logstash ../config/es_log_grok.conf
- 创建出索引 es-log-text-2022.03.14
- 需要细化的5个字段全部都展示出来了