ELK日志采集系统构建实战(十七)

ELK日志采集系统构建实战讲解,让小伙伴更深入的理解ELK。
1 、首先确保服务器已经运行了 ES 集群
 
ELK日志采集系统构建实战(十七)
 
ELK日志采集系统构建实战(十七)
2 、确保服务器上已经安装部署了 logstash
 
ELK日志采集系统构建实战(十七)
 
3 、在 Logstash 安装路径下的 config 目录中,新建一个 conf 文件,取名为 es_log.conf,并且填入以下内容:
 
ELK日志采集系统构建实战(十七)
 
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 、控制台会输出:
 
ELK日志采集系统构建实战(十七)
 
 
6 、我们到浏览器查询:
 
ELK日志采集系统构建实战(十七)
 
发现 ES 中确实创建了一个索引 es-log-2020.07.08
7 、在 ES 中查询这个索引的内容
 
ELK日志采集系统构建实战(十七)
8 、仔细检查存入的日志内容,发现日志信息是作为整体存入 message 字 段的:
 
ELK日志采集系统构建实战(十七)
 
有没有办法存入的更细粒些呢?
9 、仔细分析 es 的日志,呈现了一定的结构化特征:
 
ELK日志采集系统构建实战(十七)
总是: “ [ 时间戳 ][ 日志级别 ][ 输出信息的类名 ][ 节点名 ] 具体的日志信息 ”这种格式,所以我们完全可以考虑使用过滤器插件对文本进行分析后再存 入 es ,怎么分析?可以用 grok 过滤器。
10 、 在 Logstash 安装路径下的 config 目录中,新建一个 conf 文件,取名 为 log_grok.conf ,并且填入以下内容:

ELK日志采集系统构建实战(十七)

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 ,当然只能检查语法,不能检查诸如
正则表达式是否正确这类问题。

ELK日志采集系统构建实战(十七)

12 、执行 ./logstash -f ../config/log_grok.conf ,如果发现程序没有输出,有 可能是 elk 的日志文件已经被处理过, logstash 不会重复处理,这时可以到 logstash 的 /data/plugins/inputs/file 目录下,删除 .sincedb 文件(这个文件是个 隐藏文件),再执行。

 ELK日志采集系统构建实战(十七)

 
ELK日志采集系统构建实战(十七)
可以看见,每条日志已经成功的被解析了。
13 、现在考虑如何存入 es ,按照原来的

ELK日志采集系统构建实战(十七)

 

ELK日志采集系统构建实战(十七)

定义好索引的 mapping(映射),注意要和我们对日志的分解一一对应。

14 、创建一个新的 conf 文件,取名 es_log_grok.conf ,内容如下:

ELK日志采集系统构建实战(十七)

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日志采集系统构建实战(十七)

ELK实战demo到此结束,下一篇我们分析es的性能优化策略,敬请期待。