查询示例
这些LogQL查询的例子解释查询完成。
日志查询示例
例子过滤IP地址
返回日志行并不在IPv4地址范围内:
{job_name =“myapp”} ! = ip (“192.168.4.5-192.168.4.20”)
这个例子匹配日志行与IPv4子网值
192.168.4.5/16
除了IP地址192.168.4.2
:{job_name =“myapp”} | logfmt | addr ip (“192.168.4.5/16”) | addr ! = = ip (“192.168.4.2”)
例子,帮助安全评估
提取失败登录的用户名和IP地址从Linux
/var/log/secure
{工作= "安全"}| ~“无效的用户。*”| regexp”(^ (?P <用户> \ \ S + {1,2} {8})”| regexp "(^(?P
\\S+ {1,2}){10})" | line_format "IP = {{.ip}}\tUSER = {{.user}}" 从Linux获得成功登录
/var/log/secure
{工作=“安全”}! =“grafana_com”| =“会话打开”! = | regexp“sudo: (^ (?P <用户> \ \ S + {1,2} {11})”| line_format"USER = {{.user}}"
指标的查询示例
返回所有non-timeout错误的每秒的速度在最后一分钟内每个主机的MySQL的工作,并且只包含错误的时间超过10秒。
(主机)和(率({工作=“mysql”} | =“错误”! = json | |“超时”持续时间> 10 s [1 m]))
多个过滤阶段的例子
查询结果的连续评估收集的部分查询从左到右。提高查询效率,过滤阶段顺序从左到右:
- 流选择器
- 线过滤器
- 标签过滤器
考虑查询:
{集群= " ops-tools1 ",名称空间=“loki-dev”,工作=“loki-dev / query-frontend”} | = "指标。去" ! = "的秩序”| logfmt |时间> 30年代或status_code ! = " 200 "
在这个查询中,选择器
{集群= " ops-tools1 ",名称空间=“loki-dev”,工作= " loki-dev / query-frontend "}
有两个过滤器行:| = " metrics.go "
和! =“秩序”
。的日志行确定流选择器,查询结果只包括这些日志行包含字符串“指标。去”,不包含字符串“秩序”。
的logfmt
解析器产生的持续时间
和status_code
标签,这样他们可以使用一个标签过滤器。
标签过滤器|时间> 30年代或status_code ! = " 200 "
日志行进一步过滤掉。它包括那些包含日志行status_code
标签与任何价值以外的价值200,以及日志行包含一个持续时间
标签与一个值大于30节,
每个查询都有流选择器时,并不是所有的查询将行标签和过滤器。
使用多个解析器的示例
考虑这个logfmt日志。提取这个logfmt日志的方法和路径,
水平=调试ts = 2020 - 10 - 02 - t10:10:42.092268913z调用者=日志记录。:66 traceID = a9d4d8a928d8db1味精= " POST / api /舞会/ api / v1 / query_range (200) 1.5 s”
提取方法和路径,使用多个解析器(logfmt和regexp):
{工作=“loki-ops / query-frontend”} | logfmt | line_format”{{。味精}}”| regexp”(P <法> \ \ w +) (? P <路径> [\ \ w | /] +) \ \ ((P <地位> \ \ d + ?) \ \) (? P <时间>。*)"
这是可能的因为| line_format
重新格式化日志行POST / api /舞会/ api / v1 / query_range(200) 1.5秒
然后可以解析的| regexp……
解析器。
日志行格式示例
下面的查询展示如何格式化日志行,让它更容易在屏幕上阅读。
{集群= " ops-tools1 ",名字=“查询器”,名称空间=“loki-dev”} | = "指标。“! =”loki-canary“| logfmt |查询! = " " | label_format查询= "{{取代.query \“\ \ n \ \“\”1}}”| line_format”{{.ts}} {{\ t。持续时间}}\ ttraceID = {{。traceID}} \ t {{printf \ " % -100.100 s \ " .query}}”
标签格式用于清洁查询而行格式减少信息并创建一个表格输出。
对于这些给定的日志:
水平= info ts = 2020 - 10 - 23 t20:32:18.094668233z调用者=指标。:81 org_id = 29 traceID = 1980 d41501b57b68延迟=快速查询= "{集群= \“ops-tools1 \”,工作= \“loki-ops / query-frontend \”} | = \ " query_range \”“query_type =过滤器range_type =范围长度= 15 m0一步= 7 s时间= 650.22401女士地位= 200 throughput_mb = 1.529717 total_bytes_mb = 0.994659水平= info ts = 2020 - 10 - 23 t20:32:18.068866235z调用者=指标。:81 org_id = 29 traceID = 1980 d41501b57b68延迟=快速查询= "{集群= \“ops-tools1 \”,工作= \“loki-ops / query-frontend \”} | = \ " query_range \”“query_type =过滤器range_type =范围长度= 15 m0一步= 7 s时间= 624.008132女士地位= 200 throughput_mb = 0.693449 total_bytes_mb = 0.432718
结果将会是:
2020 - 10 - 23 t20:32:18.094668233z 650.22401 ms traceID = 1980 d41501b57b68{集群=“ops-tools1”,工作=“loki-ops / query-frontend”} | =“query_range”2020 - 10 - 23 - 624.008132 t20:32:18.068866235z女士traceID = 1980 d41501b57b68{集群=“ops-tools1”,工作=“loki-ops / query-frontend”} | =“query_range”
可以带ANSI序列从日志行,使其更容易解析它进一步指出:
{工作=“例子”}|使脱色
这样这个日志:
[2022-11-04 22:17:57.811]033年\ [0;32 http 033 \ [0 m:得到/ _health女士(0)204
变成:
[2022-11-04 22:17:57.811]http: / _health女士(0)204
打开示例
计算p99 nginx-ingress延迟的路径:
quantile_over_time(0.99,{集群= " ops-tools1 ",容器=“ingress-nginx”} | json | __error__ = " |打开request_time [1 m]),(路径)
每个组织ID:计算处理的字节数量
总和(org_id) (sum_over_time({容器集群=“ops-tools1”=“loki-dev”} | = "指标。走”| logfmt |打开bytes_processed [1 m]))
向量聚合的例子
得到最高的十大应用程序日志吞吐量:
topk(10,总和(率(=“us-east1”}{地区[5 m]))(名称))
获取日志行为指定的工作,最后五分钟分组级别:
sum (count_over_time({工作=“mysql”}(5米))),(高度)
HTTP Get请求的速度/家庭
端点NGINX日志的地区:
avg(率(({工作=“nginx”} | =“获得”| = json |路径“/ home”)[10])),(地区)