この記事は「ウィルゲート Advent Calendar 2024」の 4日目の記事です。 adventar.org
こんにちは、インフラユニット所属の加藤です。
前編と後編分けてパイプラインの主要機能をご紹介しています。
後編の今回は、プロセッサー機能を紹介します。プロセッサー機能をマスターしてログから特定の情報を抽出したり、属性のリマッピング、データの変換、タグの追加などできるようになりましょう。
※前編はこちらのページをご覧ください。
プロセッサー機能とは
前編ではパイプラインの使い方として下記をご紹介しました。
1. フィルターで処理対象のログを絞り込む
2. プロセッサーを使用してログに必要な属性を付加する
後編の本記事では、2. プロセッサーを使用してログに必要な属性を付加する方法をご紹介します。
プロセッサーを使ったログの処理
それではプロセッサーの使い方を見ていきましょう。以下は、今回紹介するプロセッサーです。
プロセッサー | 説明 |
---|---|
Grokパーサー | 非構造化ログを構造化ログへ変換するために利用します。例えば、Apacheアクセスログを構造化するには、DatadogのGrokパーサー設定で正規表現を定義して、必要な属性を抽出します。 |
ユーザーエージェントパーサー | 構造化されたログ内のユーザーエージェント情報からOS、ブラウザ、デバイスなどの詳細を自動で抽出します。 |
カテゴリープロセッサー | 特定の条件に応じてログに新しい属性(カテゴリ)を設定するプロセッサーです。主に、ステータスコードや特定のメタデータに基づいてログレベル(INFO、WARNINGなど)を割り当て、分類やフィルタリングをしやすくします。これにより、ログの分析やアラート設定が容易になります。 |
ログステータスリマッパー | ログに公式のステータス属性を設定し、色分け表示や視覚的な区別ができるようにするプロセッサーです。たとえば、ERRORやWARNINGのログを強調表示することで、異常検知や迅速な対応が可能になります。 |
それでは、プロセッサーの設定方法を個別に見ていきましょう。
Grokパーサー
Grokパーサーは、非構造化ログを構造化ログに変換するためのパーサーです。
今回は、Apacheのアクセスログの例を使用して、設定方法を解説します。
127.0.0.1 - - [07/Nov/2024:14:00:01 +0900] "GET /index.html HTTP/1.1" 200 1024 "https://example.com/home" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
まず、先ほど作成したパイプライン内でAdd Processor
をクリックします。
次に、Select the processor type
でGrok Parser
を選択します。
Grok Parserの設定画面が表示されます。
各項目について説明しましょう。
項目 | 説明 |
---|---|
Name the processor | プロセッサーの名前 |
log samples | サンプルログを貼り付け、パースルールが正しく動作するか確認します。 |
Define parsing rules | パースルールを定義し、非構造化ログから属性を抽出できるようにします。 |
次はAdvanced settingsです。
項目 | 説明 |
---|---|
Name the processor | デフォルトは message 属性の値をパースしますが、別の属性を指定できます。 |
Helper Rules | パースルールで再利用するための補助ルールを定義できます。 |
設定が完了したら、サンプルログを log samples
に貼り付けましょう。すると、現状ではNOT MATCHと表示され、パースルールが未定義のためログが構造化されていないことがわかります。
127.0.0.1 - - [07/Nov/2024:14:00:01 +0900] "GET /index.html HTTP/1.1" 200 1024 "https://example.com/home" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
ここでは公式が提供するApache用のパースルールを流用します。
Define parsing rules
access.common %{_client_ip} %{_ident} %{_auth} \[%{_date_access}\] "(?>%{_method} |)%{_url}(?> %{_version}|)" %{_status_code} (?>%{_bytes_written}|-) access.combined %{access.common} "%{_referer}" "%{_user_agent}"
Helper Rules
_auth %{notSpace:http.auth:nullIf("-")} _bytes_written %{integer:network.bytes_written} _client_ip %{ipOrHost:network.client.ip} _version HTTP\/%{regex("\\d+\\.\\d+"):http.version} _url %{notSpace:http.url} _ident %{notSpace:http.ident:nullIf("-")} _user_agent %{regex("[^\\\"]*"):http.useragent} _referer %{notSpace:http.referer} _status_code %{integer:http.status_code} _method %{word:http.method} _date_access %{date("dd/MMM/yyyy:HH:mm:ss Z"):date_access}
ここで、Define parsing rulesとHelper Rulesの関係を見てください。
Helper Rulesで定義された_auth
や_bytes_written
が、Define parsing rulesで%{_auth}
%{_bytes_written}
と再利用されているのが分かります。
Helper Rulesを使用することで、共通のパースルールを一度定義し、複数の場所で再利用できるため、設定の簡潔化や保守性の向上が図れます。
設定するとパースできました。
これで設定が完了したので、Create
をクリックしてパイプラインにプロセッサーを追加しましょう。
Log Explorerから対象のログを確認してみましょう。
ログが構造化され、Attributesにさまざまな属性が追加されたことを確認できました。このように、Grokパーサーを活用することで、ログを簡単に構造化できます。
ユーザーエージェントパーサー
ユーザーエージェントパーサーを使用して、構造化ログ内のhttp.useragent
属性からOS、ブラウザ、デバイス情報を抽出する方法も試してみましょう。
"attributes": { "http": { "useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", } }
※http.useragent
の該当箇所
パイプラインにUser-Agent Parserを追加し、以下の設定を行います。
項目 | 説明 |
---|---|
Set User-Agent attribute | ユーザーエージェントの属性を指定します。 |
Set target attribute path | 抽出したOS、ブラウザ、デバイス情報を設定する属性を指定します。 |
User-Agent Parserがパイプラインに追加されました。
Log Explorerで確認すると、http.useragent_details
属性が追加されているのが確認できます!
"attributes": { "http": { "useragent_details": { "os": { "major": "10", "family": "Windows" }, "browser": { "patch": "0", "patch_minor": "0", "major": "114", "minor": "0", "family": "Chrome" }, "device": { "family": "Other", "category": "Desktop" } } }
※http.useragent_details
の該当箇所を抜粋。
また、画像だと分かりづらいため、テキストを張り付けています。
このように、Datadogのプロセッサーを利用することで、さまざまな属性を自動的に付加でき、ログの可視性と分析力が向上します。
カテゴリープロセッサーとログステータスリマッパーの合わせ技
最後に、カテゴリプロセッサーとログステータスリマッパーを組み合わせて使用する方法をご紹介します。
この設定により、ログにステータスを付与して、視覚的に分析しやすくなります。まずは、ステータスが設定されていない状態と設定されている状態を比較してみましょう。
このように、ステータスを設定することでログレベルが色で表現されるため、視覚的にわかりやすくなります。
それでは、カテゴリープロセッサーとログステータスリマッパーを順に設定方法を説明します。
カテゴリープロセッサー
カテゴリープロセッサーを使用すると、条件に応じて新しい属性を設定できます。今回は、ステータスコードに応じてログレベルを設定します。
ステータス | ログレベル |
---|---|
200番台 | INFO |
300番台 | NOTICE |
400番台 | WARNING |
500番台 | ERROR |
まずはパイプラインにCategory Processor
を追加します。主な設定項目は以下の通りです。
項目 | 説明 |
---|---|
Set target category attribute | カテゴリープロセッサーで分類した値を設定する属性を指定します。 |
Populate category | 条件式と一致した場合に設定する値を指定します。 |
Review added entries | 追加されたエントリ一覧が表示されます。 |
また、Populate categoryの設定項目は以下の通りです。
項目 | 説明 |
---|---|
All events that match | ここには条件式を指定します。この条件に一致するログイベントが処理対象となります。たとえば、@http.status_code:2* は、HTTPステータスコードが200番台のすべてのイベントを対象とすることを意味します。 |
Appear under the value name | 条件に一致したログに設定する値やラベルを指定します。この例では、HTTPステータスコードが200番台のイベントにINFO というログレベルが付与されます。 |
それでは、200番台のステータスコードをINFOレベルに紐づけましょう。設定値は以下の通りです。
All events that match | Appear under the value name |
---|---|
@http.status_code:2* | INFO |
設定後、Add
をクリックすると、エントリが追加されます。
残りのエントリも同様に追加し、Create
をクリックしてプロセッサーを作成します。
All events that match | Appear under the value name |
---|---|
@http.status_code:3* | NOTICE |
@http.status_code:4* | WARNING |
@http.status_code:5* | ERROR |
これで、log_level
属性が作成されたことを確認できます。
"attributes": { "log_level": "ERROR", }
※log_level
の該当箇所を抜粋
しかし、この時点ではログの色は変わりません。これは、公式なステータスとしてlog_level
がまだ紐づけられていないためです。
ステータスとlog_level
を紐づけるためにログステータスリマッパーを使いましょう。
ログステータスリマッパー
次に、ログステータスリマッパーを使用してlog_levelを公式なステータスとして紐づけます。
項目 | 説明 |
---|---|
Set status attribute(s) | 公式ステータスとしてセットする属性を指定します。 |
パイプラインにログステータスリマッパーが追加されました。
それではLog Explorerを見てみましょう。
Log Explorerで確認すると、ログが色分けされて表示されています!
個別のログも、各ログレベルが一目でわかるようになっています。
その他のプロセッサー
今回、代表的なGrokパーサーといくつかプロセッサーを紹介しましたが、Datadogには他にも便利なプロセッサーが多数用意されています。
公式ドキュメントを参考にして、ぜひ他のプロセッサーも試してみてください。
まとめ
前編と後編を通じて、Datadogのパイプライン機能を活用し、ログの構造化や属性を追加する方法を解説しました。パイプラインを使用することで、非構造化ログを解析しやすい形式に変換し、Datadogでのフィルタリングや可視化、アラート設定を効果的に行えるようになります。
ご紹介したプロセッサー以外に、Datadogには公式ドキュメントで紹介されている多様なプロセッサーが用意されているため、用途に応じて組み合わせることで、ログ管理をより効率的に行うことができます。
ぜひ、パイプラインを活用して分析を便利にしていきましょう。
「ウィルゲート Advent Calendar 2024(https://adventar.org/calendars/10272)」、翌日は大嶋さんによる「 保守開発チームの効果的な目標設定と実績管理法 」です。 お楽しみに!