Token导航 LogoToken导航

Agent Skill · 研究检索

loki-log-query(loki 日志查询)

loki-log-query 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

loki-log-query 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证信息还不明确,第三方扫描有未通过项,按安装量在研究检索类的 73,675 个 Skill 里排第 67,016。

总安装 256周安装 11GitHub Stars 11下载 90核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:loki-log-query(loki 日志查询)
来源仓库:https://github.com/xu-cell/ai-engineering-init
仓库路径:skills/loki-log-query
安装命令:
npx skills add https://github.com/xu-cell/ai-engineering-init --skill loki-log-query
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/xu-cell/ai-engineering-init --skill loki-log-query

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

loki-log-query 用于查找、检索和筛选相关信息。适合在 Codex、Claude、Cursor、Gemini CLI 中根据关键词、任务场景快速定位候选结果。通过 npx skills add 命令从指定 GitHub 仓库安装使用。安装前需确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

来源仓库内路径:skills/loki-log-query

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/xu-cell/ai-engineering-init --skill loki-log-q…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

loki-log-query 怎么安装?

在终端执行 npx skills add https://github.com/xu-cell/ai-engineering-init --skill loki-log-query。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

loki-log-query 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

loki-log-query 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

loki-log-query 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

loki-log-query 用的人多吗?

公开数据是累计安装 256 次,近一周安装 11 次,下载 90 次,GitHub 11 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

loki-log-query 安全吗?

第三方扫描有未通过项,风险较高。除非你确认过源码,否则不建议直接安装到常用环境。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
loki-log-query

loki 日志查询 · 本页

25611需要联网未明确未通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Loki 日志查询技能

概述

通过 Grafana Loki API 查询线上日志。支持:

  1. 多环境管理:5 个 Grafana 日志服务,按需切换
  2. traceId 查询:通过日志ID获取完整请求链路
  3. 接口路径查询:通过 API 接口路径查询相关日志
  4. 关键词搜索:错误信息、类名、自定义关键词

多环境配置

配置文件:.claude/skills/loki-log-query/environments.json

环境列表

环境别名名称URL快捷词
test13测试13(主测试环境)https://test13.xnzn.net/grafanatest13, 13
monitor-testMonitor 测试环境https://monitor-test.xnzn.net/grafanamtest
monitor-devMonitor 开发环境https://monitor-dev.xnzn.net/grafanamdev, dev
monitor02-devMonitor02 开发环境https://monitor02-dev.xnzn.net/grafanam02, monitor02
monitor-tyy-devMonitor 体验园开发环境https://monitor-tyy-dev.xnzn.net/grafanatyy, 体验园

环境匹配规则

用户说的话 → 匹配环境:

  • "查 test13 的日志" → test13
  • "去 monitor-dev 查" → monitor-dev
  • "切到体验园" → monitor-tyy-dev
  • "去 m02 查一下" → monitor02-dev
  • 未指定环境 → 使用 active 字段指定的默认环境

读取配置

SKILL_DIR="$CLAUDE_PROJECT_DIR/.claude/skills/loki-log-query"
ENV_FILE="${SKILL_DIR}/environments.json"

# 读取指定环境(参数: 环境别名)
read_env() {
  local ENV_KEY="${1:-$(python3 -c "import json; print(json.load(open('${ENV_FILE}'))['active'])")}"
  GRAFANA_URL=$(python3 -c "import json; print(json.load(open('${ENV_FILE}'))['environments']['${ENV_KEY}']['url'])")
  TOKEN=$(python3 -c "import json; print(json.load(open('${ENV_FILE}'))['environments']['${ENV_KEY}']['token'])")
  API="${GRAFANA_URL}/api/datasources/proxy/uid/loki/loki/api/v1"
  echo "Environment: ${ENV_KEY} → ${GRAFANA_URL}"
}

# 通过别名查找环境 key
find_env() {
  python3 -c "
import json
data = json.load(open('${ENV_FILE}'))
alias = '${1}'.lower()
for key, env in data['environments'].items():
    if alias == key or alias in env.get('aliases', []):
        print(key)
        break
else:
    print(data['active'])
"
}

切换活跃环境

# 切换默认环境为 monitor-dev
python3 -c "
import json
data = json.load(open('${ENV_FILE}'))
data['active'] = 'monitor-dev'
json.dump(data, open('${ENV_FILE}', 'w'), indent=2, ensure_ascii=False)
print('Switched to:', data['active'])
"

更新 Token

# 为某个环境设置 Token
python3 -c "
import json
data = json.load(open('${ENV_FILE}'))
data['environments']['monitor-dev']['token'] = 'glsa_新的token值'
json.dump(data, open('${ENV_FILE}', 'w'), indent=2, ensure_ascii=False)
print('Token updated for monitor-dev')
"

API 基础

项目值
数据源Loki(uid: loki)
API 路径{GRAFANA_URL}/api/datasources/proxy/uid/loki/loki/api/v1/query_range
认证Authorization: Bearer {TOKEN}
默认标签app="yunshitang"
重要:Loki API 必须通过 Grafana datasource proxy 访问,直接 /loki/api/v1/ 会返回 404。 查询时不限 project 标签({app="yunshitang"}),可覆盖该 Grafana 下所有环境。

日志格式

2026-03-07 09:16:53.039,bcf6d955-fa26-45a5-9628-748f7ac4eed2,,,  INFO 1 --- [线程名] 类名 : 行号 : 消息内容
位置字段示例
第1段时间戳2026-03-07 09:16:53.039
第2段traceIdbcf6d955-fa26-45a5-9628-748f7ac4eed2 或 a53dd0b0cc62bf4a79a63e77444f6f3f
第3段商户ID553722740746489856
第4段用户ID553723188689768448
第5段日志内容INFO 1 --- [thread] Class: 123: msg
traceId 可能是 UUID 格式(带横线)或 32位hex(不带横线),都支持。

查询场景

场景 1:按 traceId 查完整链路(最常用)

用户说:"用 a53dd0b0cc62bf4a79a63e77444f6f3f 查日志"

TRACE_ID="a53dd0b0cc62bf4a79a63e77444f6f3f"
END=$(date +%s)000000000
START=$(( $(date +%s) - 21600 ))000000000  # 最近6小时

curl -s "${API}/query_range" \
  -H "Authorization: Bearer ${TOKEN}" \
  --data-urlencode "query={app=\"yunshitang\"} |= \"${TRACE_ID}\"" \
  --data-urlencode "start=${START}" \
  --data-urlencode "end=${END}" \
  --data-urlencode "limit=500" \
  --data-urlencode "direction=forward" \
  | python3 -c "
import sys, json
data = json.load(sys.stdin)
if data.get('status') == 'success':
    for stream in data['data']['result']:
        labels = stream.get('stream', {})
        print(f'--- {labels.get(\"app\",\"?\")}/{labels.get(\"project\",\"?\")} ---')
        for ts, line in stream['values']:
            print(line)
else:
    print('Error:', data)
"

场景 2:按接口路径查日志

用户说:"查 /security/summary/order/mealtime/classify/page 这个接口的日志"

接口路径出现在请求日志的 RequestLoggingFilter 中(>>> POST /xxx 或 >>> GET /xxx)。

API_PATH="/security/summary/order/mealtime/classify/page"
END=$(date +%s)000000000
START=$(( $(date +%s) - 21600 ))000000000  # 最近6小时

curl -s "${API}/query_range" \
  -H "Authorization: Bearer ${TOKEN}" \
  --data-urlencode "query={app=\"yunshitang\"} |= \"${API_PATH}\"" \
  --data-urlencode "start=${START}" \
  --data-urlencode "end=${END}" \
  --data-urlencode "limit=200" \
  --data-urlencode "direction=forward" \
  | python3 -c "
import sys, json, re
data = json.load(sys.stdin)
if data.get('status') != 'success':
    print('Error:', data); sys.exit()

# 从匹配的请求日志中提取 traceId
trace_ids = set()
all_lines = []
for stream in data['data']['result']:
    for ts, line in stream['values']:
        all_lines.append(line)
        # 提取 traceId(第2个逗号分隔字段)
        parts = line.split(',')
        if len(parts) >= 2:
            tid = parts[1].strip()
            if len(tid) >= 32:
                trace_ids.add(tid)

print(f'Found {len(all_lines)} lines, {len(trace_ids)} unique traceIds')
print()
for tid in list(trace_ids)[:10]:
    print(f'  traceId: {tid}')
print()
for line in all_lines[:30]:
    print(line)
if len(all_lines) > 30:
    print(f'... and {len(all_lines)-30} more lines')
"

进阶:找到 traceId 后,再用场景 1 查该 traceId 的完整链路。

场景 3:关键词搜索

用户说:"搜一下 LeException" 或 "查 ERROR 日志"

KEYWORD="LeException"
END=$(date +%s)000000000
START=$(( $(date +%s) - 21600 ))000000000  # 最近6小时

curl -s "${API}/query_range" \
  -H "Authorization: Bearer ${TOKEN}" \
  --data-urlencode "query={app=\"yunshitang\"} |= \"${KEYWORD}\"" \
  --data-urlencode "start=${START}" \
  --data-urlencode "end=${END}" \
  --data-urlencode "limit=100" \
  --data-urlencode "direction=backward"

常用关键词组合:

# 所有 ERROR 日志
{app="yunshitang"} |= "ERROR"

# 业务异常
{app="yunshitang"} |= "LeException"

# SQL 错误
{app="yunshitang"} |~ "SQLSyntaxError|DataAccessException|BadSqlGrammar"

# 空指针
{app="yunshitang"} |= "NullPointerException"

# 按类名搜索
{app="yunshitang"} |= "OrderInfoService"

# 组合:ERROR + 特定类
{app="yunshitang"} |= "ERROR" |= "OrderInfoService"

# 排除健康检查噪音
{app="yunshitang"} |= "ERROR" != "health" != "actuator"

场景 4:按接口查完整链路(组合查询)

用户说:"查 /api/v2/web/order/list 接口的全链路日志"

两步走:

  1. 先按接口路径搜索,拿到 traceId
  2. 再按 traceId 查完整链路
# Step 1: 找 traceId
API_PATH="/api/v2/web/order/list"
END=$(date +%s)000000000
START=$(( $(date +%s) - 21600 ))000000000  # 最近6小时

TRACE_IDS=$(curl -s "${API}/query_range" \
  -H "Authorization: Bearer ${TOKEN}" \
  --data-urlencode "query={app=\"yunshitang\"} |= \"${API_PATH}\" |= \">>>\"" \
  --data-urlencode "start=${START}" \
  --data-urlencode "end=${END}" \
  --data-urlencode "limit=10" \
  --data-urlencode "direction=backward" \
  | python3 -c "
import sys, json
data = json.load(sys.stdin)
for stream in data.get('data',{}).get('result',[]):
    for ts, line in stream['values']:
        parts = line.split(',')
        if len(parts) >= 2 and len(parts[1].strip()) >= 32:
            print(parts[1].strip())
")

echo "Found traceIds:"
echo "${TRACE_IDS}" | head -5

# Step 2: 用第一个 traceId 查完整链路
FIRST_TID=$(echo "${TRACE_IDS}" | head -1)
if [ -n "${FIRST_TID}" ]; then
  curl -s "${API}/query_range" \
    -H "Authorization: Bearer ${TOKEN}" \
    --data-urlencode "query={app=\"yunshitang\"} |= \"${FIRST_TID}\"" \
    --data-urlencode "start=${START}" \
    --data-urlencode "end=${END}" \
    --data-urlencode "limit=500" \
    --data-urlencode "direction=forward" \
    | python3 -c "
import sys, json
data = json.load(sys.stdin)
for stream in data.get('data',{}).get('result',[]):
    for ts, line in stream['values']:
        print(line)
"
fi

场景 5:指定 project 环境查询

如果用户指定了具体的 project(如 test20):

{app="yunshitang",project="test20"} |= "traceId值"

LogQL 语法速查

流选择器

操作语法示例
精确匹配={app="yunshitang"}
不等于!={app!="test"}
正则匹配=~{project=~"test2.*"}

行过滤

操作语法示例
包含`\=``\= "ERROR"`
不包含!=!= "DEBUG"
正则匹配`\~``\~ "Exception\Error"`
正则排除!~`!~ "health\ping"`

查看可用标签值

# 列出所有 project
curl -s "${API}/label/project/values" -H "Authorization: Bearer ${TOKEN}"

# 列出所有 app
curl -s "${API}/label/app/values" -H "Authorization: Bearer ${TOKEN}"

Bug 修复工作流

1. 获取线索(traceId / 接口路径 / 错误关键词)
   ↓
2. 确定环境(哪个 Grafana?读取 environments.json)
   ↓
3. 查询日志(场景 1-4 选择合适的查询方式)
   ↓
4. 分析日志(ERROR/异常堆栈/SQL 错误/耗时)
   ↓
5. 定位代码(类名:行号 → 项目搜索)
   ↓
6. 修复 + 更新云效任务状态

日志分析重点

  1. ERROR 级别日志 — 异常根因
  2. 异常堆栈 — at net.xnzn.core.xxx 开头的行
  3. SQL 错误 — SQLSyntaxErrorException、DataAccessException
  4. 业务异常 — LeException 抛出的位置
  5. 耗时 — Completed xxx in Nms,识别慢请求
  6. 请求/响应 — RequestLoggingFilter 的 >>> 和 <<< 日志

联动技能

场景联动技能
排查 Bugbug-detective
查询云效任务yunxiao-task-management
查数据库mysql-debug
性能问题performance-doctor

Grafana Service Account Token 创建

每个 Grafana 环境需要独立创建 Token:

  1. 登录对应 Grafana URL
  2. 左侧菜单 → Administration → Service accounts
  3. Add service account(名称:claude-loki-reader),角色:Viewer
  4. Add service account token → 复制
  5. 更新 environments.json 中对应环境的 token 字段

注意

  • 如果 Token 为空会报 invalid API key,需要先为该环境创建 Token
  • 查询默认不限 project,可覆盖该 Grafana 下所有项目环境
  • direction=forward 按时间正序,direction=backward 按时间倒序(最新优先)
  • 如果是 Bug 排查完整流程,同时使用 bug-detective

平台分布

Codex

38.22%
按下载量换算34

Claude

30.6%
按下载量换算28

Cursor

18.45%
按下载量换算17

Gemini CLI

9.43%
按下载量换算8

安全审计

Gen Agent Trust Hub

未通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills