dt-obs-logs
ログのクエリ・フィルタリング・パターン分析・エラー率の計算を行うスキルです。アプリケーションやインフラのログ検索、エラーパターンの分析、ログデータの相関調査が必要な際に使用してください。「直近1時間のエラーログを表示」「キーワードでログを検索」「エラー率を確認」「上位エラーメッセージ」「プロセスグループ別ログ」「1分あたりのログ件数推移」などをトリガーとして発動します(既存クエリの説明・製品ドキュメントの質問・分散トレーシングやスパン分析には使用しないでください)。
description の原文を見る
>- Log querying, filtering, pattern analysis, and error rate calculation. Use when searching application or infrastructure logs, analyzing error patterns, or correlating log data. Trigger: "show error logs", "search logs for keyword", "log error rate", "recent errors", "logs from last hour", "find log entries", "top error messages", "log patterns", "parse JSON logs", "logs by process group", "log trends over time", "log entry counts per minute". Do NOT use for explaining existing queries, product documentation questions, distributed tracing or span analysis (use dt-obs-tracing).
SKILL.md 本文
ログ分析スキル
DQLを使用してDynatraceログデータをクエリ、フィルタリング、分析し、トラブルシューティングと監視を実行します。
このスキルが対象とする内容
- 重要度、コンテンツ、エンティティによるログの取得とフィルタリング
- パターンマッチングを使用したログメッセージの検索
- エラー率と統計情報の計算
- ログパターンとトレンドの分析
- ディメンションによるログデータのグループ化と集約
クロスソース結合が必要: クエリがログをホスト属性 (OSタイプ、ホスト名、IPアドレス、クラウドプロバイダー) と組み合わせる必要がある場合 → クエリを作成する前に
dt-dql-essentials/references/smartscape-topology-navigation.mdも読んでください。
ユースケース
以下の場合にこのスキルを使用してください:
- 特定のログエントリを検索したい (例: "過去1時間のエラーログを表示")
- ログを重要度、プロセスグループ、またはコンテンツでフィルタリング
- ログから特定のキーワードまたはフレーズを検索
- エラー率またはログ統計を計算
- 一般的なエラーメッセージまたはパターンを特定
- 時系列でログトレンドを分析
- ログデータを使用して問題をトラブルシューティング
主要概念
ログデータモデル
- timestamp: ログエントリが作成された時刻
- content: ログメッセージテキスト
- status: ログレベル (ERROR、FATAL、WARN、INFO など)
- dt.process_group.id: 関連するプロセスグループエンティティ
- dt.process_group.detected_name: プロセスグループIDを人間が読める名前に解決
クエリパターン
- fetch logs: ログデータアクセスの主なコマンド
- 時間範囲:
from:now() - <duration>で時間ウィンドウを指定 - フィルタリング: 重要度、コンテンツ、エンティティフィルターを適用
- 集約: ログデータのグループ化と要約
- パターン検出:
matchesPhrase()とcontains()でコンテンツを検索
一般的な操作
- 重要度フィルタリング (単一または複数レベル)
- コンテンツ検索 (シンプルまたはフルテキスト)
- エンティティベースのフィルタリング (プロセスグループ)
- 時系列分析 (バケッティング、ソート)
- エラー率計算
- パターン分析 (例外、タイムアウト など)
コアワークフロー
1. ログ検索
時刻、重要度、コンテンツで特定のログエントリを検索します。
一般的なステップ:
- 時間範囲を定義
- 重要度でフィルタリング (オプション)
- キーワードでコンテンツを検索
- 関連するフィールドを選択
- 結果をソートと制限
例:
fetch logs, from:now() - 1h
| filter status == "ERROR"
| fields timestamp, content, process_group = dt.process_group.detected_name
| sort timestamp desc
| limit 100
2. ログフィルタリング
複数の条件 (重要度、エンティティ、コンテンツ) を使用してログを絞り込みます。
一般的なステップ:
- 時間範囲を指定してログを取得
- 重要度フィルターを適用
- エンティティでフィルタリング (process_group)
- コンテンツフィルターを適用
- 出力をフォーマットとソート
例:
fetch logs, from:now() - 2h
| filter in(status, {"ERROR", "FATAL", "WARN"})
| summarize count(), by: {dt.process_group.id, dt.process_group.detected_name}
| fieldsAdd process_group = dt.process_group.detected_name
| sort `count()` desc
3. パターン分析
ログデータ内のパターン、トレンド、異常を特定します。
一般的なステップ:
- 時間範囲を指定してログを取得
- パターン検出フィールドを追加
- エンティティまたは時間で集約
- 統計情報と比率を計算
- 頻度またはレートでソート
例:
fetch logs, from:now() - 2h
| filter status == "ERROR"
| fieldsAdd
has_exception = if(matchesPhrase(content, "exception"), true, else: false),
has_timeout = if(matchesPhrase(content, "timeout"), true, else: false)
| summarize
count(),
exception_count = countIf(has_exception == true),
timeout_count = countIf(has_timeout == true),
by: {process_group = dt.process_group.detected_name}
主要関数
フィルタリング
filter status == "ERROR"- ステータスレベルでフィルタリングin(status, {"ERROR", "FATAL", "WARN"})- 複数ステータスフィルター (リテラルセットには波括弧を使用)contains(content, "keyword")- シンプルな部分文字列検索matchesPhrase(content, "exact phrase")- フルテキストフレーズ検索
エンティティ操作
dt.process_group.detected_name- 人間が読めるプロセスグループ名を取得filter process_group == "service-name"- 特定のエンティティでフィルタリング
集約
count()- すべてのログエントリをカウントcountIf(condition)- 条件付きカウントby: {dimension}- エンティティまたは時間バケットでグループ化bin(timestamp, 5m)- トレンド分析のための時間バケッティング
フィールド操作
fields timestamp, content, status- 特定のフィールドを選択fieldsAdd name = expression- 計算フィールドを追加if(condition, true_value, else: false_value)- 条件付きロジック
一般的なパターン
コンテンツ検索
シンプルな部分文字列検索:
fetch logs, from:now() - 1h
| filter contains(content, "database")
| fields timestamp, content, status
フルテキストフレーズ検索:
fetch logs, from:now() - 1h
| filter matchesPhrase(content, "connection timeout")
| fields timestamp, content, process_group = dt.process_group.detected_name
エラー率計算
時系列のエラー率を計算:
fetch logs, from:now() - 2h
| summarize
total_logs = count(),
error_logs = countIf(status == "ERROR"),
by: {time_bucket = bin(timestamp, 5m)}
| fieldsAdd error_rate = (error_logs * 100.0) / total_logs
| sort time_bucket asc
トップエラーメッセージ
最も一般的なエラーを検索:
fetch logs, from:now() - 24h
| filter status == "ERROR"
| summarize error_count = count(), by: {content}
| sort error_count desc
| limit 20
プロセスグループ固有のログ
プロセスグループでログをフィルタリング:
fetch logs, from:now() - 1h
| fieldsAdd process_group = dt.process_group.detected_name
| filter process_group == "payment-service"
| filter status == "ERROR"
| fields timestamp, content, status
| sort timestamp desc
構造化/JSONログの解析
多くのアプリケーションはJSON形式のログ行を出力します。parse を使用してraw コンテンツをダンプする代わりにフィールドを抽出してください:
fetch logs, from:now() - 1h
| filter status == "ERROR"
| parse content, "JSON:log"
| fieldsAdd level = log[level], message = log[msg], error = log[error]
| fields timestamp, level, message, error
| sort timestamp desc
| limit 50
解析されたフィールドで集約:
fetch logs, from:now() - 4h
| filter status == "ERROR"
| parse content, "JSON:log"
| fieldsAdd message = log[msg]
| summarize error_count = count(), by: {message}
| sort error_count desc
| limit 20
注記:
parse content, "JSON:log"はレコードフィールドlogを作成 — ネストされた値にはlog[key]でアクセス- 解析のオーバーヘッドを削減するため、
parseする前にcontains()でログをフィルタリング - JSON構造化フィールドなら
contentに限らず動作
ベストプラクティス
- 常に時間範囲を指定 -
from:now() - <duration>でデータを制限 - フィルターを早期に適用 - 集約前に重要度とエンティティでフィルタリング
- 適切な検索方法を使用 - シンプルな場合は
contains()、完全一致はmatchesPhrase() - 結果を制限 - 出力を圧倒しないよう
| limit 100を追加 - 意味のある方法でソート - 最近のログには時刻でソート、トップエラーには件数でソート
- エンティティを命名 -
dt.process_group.detected_nameまたはgetNodeName()で人間が読める出力 - トレンドに時間バケットを使用 - 時系列分析には
bin(timestamp, 5m)
統合ポイント
- エンティティモデル: サービス相関に
dt.process_group.idを使用 - 時系列:
bin()と時間範囲による時系列分析をサポート - コンテンツ検索:
matchesPhrase()によるフルテキスト検索機能 - 集約:
summarizeと条件関数を使用した統計分析
制限事項とメモ
- ログの可用性はOneAgent設定とログ取り込みに依存
- フルテキスト検索 (
matchesPhrase) は大規模なデータセットではパフォーマンスへの影響がある場合あり - エンティティ名には適切なOneAgent監視が解決に必要
- 時間範囲は合理的にする必要があります (無制限のクエリを避ける)
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| ログが返されない | 時間範囲が不足またはあまりに狭い | from: ウィンドウを拡張; ログ取り込みが有効なことを確認 |
getNodeName() が null を返す | OneAgentがエンティティを監視していないまたはまだエンティティが解決されていない | OneAgentがデプロイされていることを確認し、エンティティが検出されていることを確認; 信頼できる代替手段として dt.process_group.detected_name を使用 |
matchesPhrase() が大規模データで遅い | 事前フィルタリングなしのフルテキスト検索 | matchesPhrase() 前に filter status == "ERROR" を追加 |
誤ったフィールド名 log.level | よくある間違い | 重要度には loglevel (ドット不要) を使用; dt-dql-essentials を参照 |
空の content フィールド | ログ行が空または取り込まれていない | OneAgent内のログソース設定を確認 |
関連スキル
- dt-dql-essentials - ログクエリのコアDQL構文とクエリ構造
- dt-obs-tracing - トレースIDを使用してログを分散トレースと相関
- dt-obs-problems - ログをDAVIS検出問題と相関
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- dynatrace
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/dynatrace/dynatrace-for-ai / ライセンス: Apache-2.0
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。