what
graylog 的官方定义是:Enterprise Log Management for All。
一个具有报警选项的可插入日志和事件分析服务器。
Graylog v.s ELK(Kibana)
Graylog 和 ELK(Kibana)的区别:
ELK:Logstash -> Elasticsearch -> Kibana
Graylog:Graylog Collector -> Graylog Server(封装Elasticsearch) -> Graylog Web
ELK(或者 EFK,Flunted),使用不当的几个缺点:
- 不能处理多行日志,比如Mysql慢查询,Tomcat/Jetty应用的Java异常打印
- 不能保留原始日志,只能把原始日志分字段保存,这样搜索日志结果是一堆Json格式文本,无法阅读。
- 不符合正则表达式匹配的日志行,被全部丢弃。
Graylog 的优点:
- 一体化方案,安装方便,不像ELK有3个独立系统间的集成问题。
- 采集原始日志,并可以事后再添加字段,比如http_status_code,response_time等。
- 个性化定制开发(带来很大的自由度)采集日志的脚本,并用curl/nc发送到Graylog Server,发送格式是自定义的GELF,Flunted和Logstash都有相应的输出GELF消息的插件。实际上只需要用inotifywait监控日志的modify事件,并把日志的新增行用curl/netcat发送到Graylog Server就可。
- 搜索结果高亮显示。
- 搜索语法简单,比如:
source:mongo AND response_time_ms:>5000
,避免直接输入elasticsearch搜索JSON语法 - 搜索条件可以导出为elasticsearch的搜索json文本,方便直接开发调用elasticsearch rest api的搜索脚本。
kibana 通过 x-pack 这个plugin可以给kibana提供一些炫酷的功能。
功能:
- 日志的收集和处理
- 日志portal
- 可视化集群管理:graylog 集群 和 ES 集群
在大家平时的使用中,关注最多的功能还是搜索以及搜索的性能,在这方面graylog 做了很多优化。
kibana 按照时间搜索,会把所有的索引全部扫描一遍。
graylog 会根据时间的选择,只查询时间段内的索引。
setup
Graylog服务器安装,包括四块内容:
- mongodb
- elasticsearch
- graylog-server
- graylog-web
基于 JDK/JRE 环境,
simple usage
streams:可以理解成以前的 kibana下拉选择索引。
搜索语法和 kibana 基本上没有区别,参考博客Kibana 使用简介及查询条件示例 用双引号是精确搜索,用于有特殊字符串的场景:
如:“f871a76e-4cb0-4c41-add9-3c1da35b9e2e.M.1.1”
没有双引号的是模糊搜索
字段
也可以按页面左侧显示的字段搜索限定字段。
- 全文搜索:field:value
- 精确搜索:关键字加上双引号 filed:“value”
- http.code:404 搜索http状态码为404的文档
字段本身是否存在
- exists:http:返回结果中需要有http字段
- missing:http:不能含有http字段
通配符
?
:匹配单个字符;
*
:匹配0到多个字符;
如:kiba?a, el*search。
? *
不能用作第一个字符,例如:?text *text
范围搜索
数值/时间/IP/字符串 类型的字段可以对某一范围进行查询:
length:[100 TO 200] sip:["172.24.20.110" TO "172.24.20.140"] date:{"now-6h" TO "now"}
tag:{b TO e}
搜索b到e中间的字符
count:[10 TO *]
:* 表示一端不限制范围
count:[1 TO 5}
:[ ] 表示端点数值包含在范围内,{ } 表示端点数值不包含在范围内,可以混合使用,此语句为1到5,包括1,不包括5。
简写:
age:>10 age:<=10 age:(>=10 AND <20)
逻辑操作 AND/OR/NOT
+:搜索结果中必须包含此项
-:不能含有此项
+apache -jakarta test aaa bbb:结果中必须存在apache,不能有jakarta,剩余部分尽量都匹配到
分组
(jakarta OR apache) AND jakarta
字段分组
title:(+return +"pink panther") host:(baidu OR qq OR google) AND host:(com OR cn)
转义特殊字符
+ - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
以上字符当作值搜索的时候需要用\转义。
advance
集群部署;
脚本定制化;
日志源收集;
索引定制及优化;
……