GrayLog查询语法

📚GrayLog查询语言

Graylog的查询语法接近Lucene语法。默认情况下,如果未指定要搜索的消息字段,则搜索中将包括所有消息字段。

📗官网文档

官方文档https://docs.graylog.org/docs/query-language

以下内容总结了部分查询语法以及注意事项,如果不能满足日常使用,可以查看官网文档。

📘页面结构

GrayLog Search 页面结构
image.png

📍注意事项

❗️注意:
ANDOR NOT 区分大小写,并且必须全部大写。关键词大小写敏感。检索内容大小写不敏感【取决于分词器】。

通配符:
?:匹配单个字段
*:匹配0个或多个字符

特殊字符查询需要使用\转义:
& | : \ / + - ! ( ) { } [ ] ^ " ~ * ?

⏰注意:
如果查询条件有特殊字符未转义,graylog会提示错误信息。

📜查询语法

💡字符查询

中文关键字会存在分词器问题。

# 模糊查询 直接输入关键词,多个词,用空格分隔【或的关系】 如果有且的关系,需要用AND
# 查询包含有SERVER_NAME或WorkSpace的数据
SERVER_NAME WorkSpace

# 精确查询 加引号
"SERVER_NAME" "WorkSpace"

# 字段查询
# 查询环境为dev的数据
env:dev
# 查询环境非dev的数据
NOT env:dev

# 查询不存在某个字段的日志
NOT _exists_:type     

# 多字段查询
env:(local OR dev)

# 多条件查询
env:(local OR dev) AND source:host\-10\-0\-204\-66

# 正则匹配查询,默认导通配符是关闭的。也避免使用这种方式。
env:t?st AND full_message:api*

#特殊字符转义查询:& | : \ / + - ! ( ) { } [ ] ^ " ~ * ?
resource:\/posts\/45326 

🗒数字字段

http_response_code:[500 TO *]    #查询状态码在500以上的 包含500
http_response_code:[500 TO 504]  #查询状态码在500 - 504 之间 包含 500 504
http_response_code:{400 TO 404}  #查询状态码在400 - 404 之间 不包含 400 404
bytes:{0 TO 64]
http_response_code:[0 TO 64}

http_response_code:>400
http_response_code:<400
http_response_code:>=400
http_response_code:<=400

# 组合查询
http_response_code:(>=400 AND <500)  

# 日期范围查询  时间格式为:yyyy-MM-dd HH:mm:ss.SSS
timestamp:["2022-11-12 04:31:50.693" TO "2022-11-12 06:31:50.693"]

📌常用查询示例

字段精准查询

格式:字段名:"查询信息"
示例:full_message:"告警信息"
注意:精准查询需要加引号。分词为默认分词器,对于中文默认为单字分词,不加引号查询就是模糊查询,一般不能达到预期效果。
例如:检索【登录失败】关键字,如果查询条件为 【登录失败】,那么在使用默认分词器的情况下,会查询出来包含【登、录、失、败】这四个字的日志信息,如果查询条件为 【“登录失败”】可以精确查询到包含【登录失败】的日志信息。

组合多字段查询

示例:level_name:"INFO" AND full_message:"13788888888"

💡查询说明

graylog查询底层依旧是elasticsearch,检索不到跟分词器有关,默认是标准分词器。
例如:
消息内容如下,仅检索SocketTimeoutException会检索不到,检索java.net.SocketTimeoutException即可。
image.png

elasticsearch内置分词器:

  • Standard Analyzer - 默认分词器,英文按单词词切分,并小写处理
  • Simple Analyzer - 按照单词切分(符号被过滤), 小写处理
  • Stop Analyzer - 小写处理,停用词过滤(the,a,is)
  • Whitespace Analyzer - 按照空格切分,不转小写
  • Keyword Analyzer - 不分词,直接将输入当作输出

📖参考资料

  1. Search query language — Graylog 3.2.0 documentation
GrayLog 中进行模糊查询以包含特定描述(如 GC202511240769),可以使用 GrayLog 支持的查询语法。以下是几种常见的方法: ### 使用通配符查询 通配符查询允许在查询中使用 `*` 表示零个或多个任意字符,`?` 表示单个任意字符。 示例查询语法: ``` message:*GC202511240769* ``` 这个查询会在 `message` 字段中查找包含 `GC202511240769` 的所有日志记录。如果 `GC202511240769` 可能出现在其他字段中,需要将 `message` 替换为相应的字段名。 ### 使用正则表达式查询 正则表达式提供了更强大的模糊匹配能力。 示例查询语法: ``` message:/.*GC202511240769.*/ ``` 同样,这里假设要在 `message` 字段中进行查询,如果要在其他字段查询,替换字段名即可。 ### 使用 Lucene 查询语法(如果 GrayLog 支持) Lucene 查询语法在很多日志管理系统中都有支持。 示例查询语法: ``` message:~"GC202511240769" ``` `~` 符号表示模糊匹配。不过不同版本的 GrayLog 对 Lucene 语法的支持可能略有不同。 ### 代码示例(使用 GrayLog REST API 进行查询) 如果需要通过代码进行查询,可以使用 GrayLog 的 REST API。以下是一个使用 Python 的示例: ```python import requests # GrayLog API 地址 graylog_api_url = "http://your-graylog-server/api/search/universal/relative" # 查询参数 query_params = { "query": "message:*GC202511240769*", "range": 3600 # 查询最近 1 小时的日志 } # 认证信息(如果需要) headers = { "Authorization": "Basic your-base64-encoded-credentials" } # 发送请求 response = requests.get(graylog_api_url, params=query_params, headers=headers) # 处理响应 if response.status_code == 200: results = response.json() print(results) else: print(f"查询失败,状态码: {response.status_code}") ``` ### 注意事项 - 不同版本的 GrayLog 可能对查询语法的支持略有不同,需要根据实际情况进行调整。 - 如果查询性能较差,可以考虑对日志数据进行索引优化,或者调整查询范围。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值