菜单
开源

查询示例

这些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]))

多个过滤阶段的例子

查询结果的连续评估收集的部分查询从左到右。提高查询效率,过滤阶段顺序从左到右:

  1. 流选择器
  2. 线过滤器
  3. 标签过滤器

考虑查询:

{集群= " 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])),(地区)