Logstash日志截取
里面看详细内容,简介,下载,运行等,我们下面讨论重点需要了解的东西
一.面试题: ELK 的性能怎么样?
其实这压根就是一个不正确的提问。ELK 并不是一个软件而是一个并不耦合的套件。所以,我们需要分拆开讨论这三个软件的性能如何?怎么优化?
1.LogStash 的性能,是最让新人迷惑的地方。因为 LogStash 本身并不维护队列,所以整个日志流转中任意环节的问题,都可能看起来像是 LogStash 的问题。这里,需要熟练使用本节说的测试方法,针对自己的每一段配置,都确定其性能。另一方面,就是本书之前提到过的,LogStash 给自己的线程都设置了单独的线程名称,你可以在 top -H 结果中查看具体线程的负载情况。
2.Elasticsearch 的性能。这里最需要强调的是:Elasticsearch 是一个分布式系统。从来没有分布式系统要跟人比较单机处理能力的说法。所以,更需要关注的是:在确定的单机处理能力的前提下,性能是否能做到线性扩展。当然,这不意味着说提高处理能力只能靠加机器了——有效利用 mapping API 是非常重要的。不过暂时就在这里讲述了。
3.Kibana 的性能。通常来说,Kibana 只是一个单页 Web 应用,只需要 nginx 发布静态文件即可,没什么性能问题。页面加载缓慢,基本上是因为 Elasticsearch 的请求响应时间本身不够快导致的。不过一定要细究的话,也能找出点 Kibana 本身性能相关的话题:因为 Kibana3 默认是连接固定的一个 ES 节点的 IP 端口的,所以这里会涉及一个浏览器的同一 IP 并发连接数的限制。其次,就是 Kibana 用的 AngularJS 使用了 Promise.then 的方式来处理 HTTP 请求响应。这是异步的
二.Grok 正则捕获
1.先看一个例子
日志:
Sep 2 16:00:18 cc-prd-3-tk-13-pcs1 pcs[16118]: Mon Sep 2 16:00:18 2019: PCS: recv request, app_id: app_1w5B6O4R2o1k881k12177, ip: 223.104.145.136, os: 0, device_id: 02c3864050502d43dc514905133bcc9c
Gork 日志截取(正则匹配)
%{DATA:log_date} %{TIME:log_localtime} %{JAVAFILE:name_file} %{WORD:workd}[%{WORD:ls}]: %{DATA:log_date2} %{TIME:log_localtime2} %{WORD:year_tmp}: %{WORD:name_2}: %{WORD:} %{WORD:}, %{JAVAFILE:}: %{JAVAFILE:app_id}, %{WORD}: %{IP:ip}, %{WORD:}: %{INT}, %{WORD}: %{USERNAME:device_id}
结果:
image.pngimage.png
Grok 支持把预定义的 grok 表达式 写入到文件中,官方提供的预定义 grok 表达式见:https://github.com/logstash/logstash/tree/v1.4.2/patterns。
注意:在新版本的logstash里面,pattern目录已经为空,最后一个commit提示core patterns将会由logstash-patterns-core gem来提供,该目录可供用户存放自定义patterns
如果我们需要自定义语法,需要在filter中指定路径
vi /usr/share/logstash/patterns/king
STRING [a-zA-Z0-9._-]+
KINGS \d+(?:\.\d+)?
TT (?<request_time>\d+(?:\.\d+)?)
vi test.conf
input {
stdin{} #终端输入
}
filter {
grok {
patterns_dir => ["/usr/share/logstash/patterns"]
match => {
"message" => "%{STRING:string} %{KINGS:kings} %{TT:tt}"
}
overwrite => ["message"] #匹配到重写message,message还在
#remove_field => ["message"] #匹配到移除message
}
}
output {
stdout{ codec => rubydebug}
}
overwrite => ["message"] remove_field => ["message"]注意是两个空个空格才能匹配到