📘

[Azure]データ収集ルールのカスタムログの送信先テーブルは1つだけ?

2023/07/11に公開

きっかけ

VMに適用するデータ収集ルールの数をできるだけ少なくしたいという要件があった。少なくともPortal上からの操作では、データの送信先が1つにしか設定できないため、テンプレートデプロイを利用した方法で解消できないかを検証してみた。

手順(公式URL)

https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/data-collection-rule-sample-custom-logs

https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/data-collection-text-log?tabs=portal

を使いながら試してみる。

公式との差分を本記事で載せていく。

  1. データ収集ルール作成後に、テンプレートのダウンロードを行う。
    オートメーション → テンプレートのエクスポート
  2. dataSourcesとdataFlowsに出力先のテーブルを追加する。
    一部個人情報のためマスキングしています。
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "dataCollectionRules_xxxx_test_name": {
            "defaultValue": "xxx-test",
            "type": "String"
        },
        "dataCollectionEndpoints_xxx_externalid": {
            "defaultValue": "/subscriptions/1e52a4ec-3c4d-47a3-817c-8c2892d41ace/resourceGroups/Sandbox/providers/Microsoft.Insights/dataCollectionEndpoints/xxxx",
            "type": "String"
        },
        "workspaces_xxx_externalid": {
            "defaultValue": "/subscriptions/1e52a4ec-3c4d-47a3-817c-8c2892d41ace/resourceGroups/Sandbox/providers/Microsoft.OperationalInsights/workspaces/xxx",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Insights/dataCollectionRules",
            "apiVersion": "2022-06-01",
            "name": "[parameters('dataCollectionRules_xxx_test_name')]",
            "location": "japaneast",
            "kind": "Linux",
            "properties": {
                "dataCollectionEndpointId": "[parameters('dataCollectionEndpoints_xxx_externalid')]",
                "streamDeclarations": {
                    "Custom-tbl_audit_CL": {
                        "columns": [
                            {
                                "name": "TimeGenerated",
                                "type": "datetime"
                            },
                            {
                                "name": "RawData",
                                "type": "string"
                            }
                        ]
                    }
                },
                "dataSources": {
                    "logFiles": [
                        {
                            "streams": [
                                "Custom-tbl_audit_CL"
                            ],
                            "filePatterns": [
                                "/tmp/tmp.log"
                            ],
                            "format": "text",
                            "settings": {
                                "text": {
                                    "recordStartTimestampFormat": "ISO 8601"
                                }
                            },
                            "name": "tbl_audit_CL"
                        }
			★★★追加★★★
			,
                        {
                            "streams": [
                                "Custom-tbl_audit2_CL"
                            ],
                            "filePatterns": [
                                "/tmp/tmp.log"
                            ],
                            "format": "text",
                            "settings": {
                                "text": {
                                    "recordStartTimestampFormat": "ISO 8601"
                                }
                            },
                            "name": "tbl_audit2_CL"
                        }
			★★★追加★★★
                    ]
                },
                "destinations": {
                    "logAnalytics": [
                        {
                            "workspaceResourceId": "[parameters('workspaces_xxx_externalid')]",
                            "name": "la-53555362"
                        }
                    ]
                },
                "dataFlows": [
                    {
                        "streams": [
                            "Custom-tbl_audit_CL"
                        ],
                        "destinations": [
                            "la-53555362"
                        ],
                        "transformKql": "source",
                        "outputStream": "Custom-tbl_audit_CL"
                    }
		    ★★★追加★★★
		    ,
                    {
                        "streams": [
                            "Custom-tbl_audit2_CL"
                        ],
                        "destinations": [
                            "la-53555362"
                        ],
                        "transformKql": "source",
                        "outputStream": "Custom-tbl_audit2_CL"
                    }
		    ★★★追加★★★
                ]
            }
        }
    ]
}

  1. 再度デプロイを行う。
  2. データ収集ルールのリソースにVMを追加する。(VMは作成しておく)

Portal上での見え方

少なくともPortal上での見え方は変わらない。ただ、テンプレートのエクスポート画面からjsonを見ると、ちゃんと変更は反映されていた。

Log Analytics ワークスペースでの見え方

  • 1つ目のテーブル(これはPortal上でもデータ収集ルールに設定済みのテーブル)

  • 2つ目のテーブル(テンプレートデプロイでのみ反映したテーブル)

実際にどちらのカスタムテーブルにも出力された。テーブルへの出力までには5~10分ほどかかった。

※余談
1つ目のテーブルにしかないログ(test3,test4)だが、収集ルールを再デプロイして適用されきる前にVM上でのログを追加してしまった可能性がある。そのため、jsonでのみ追加した2つ目のテーブルには出力されなかった可能性が高い。タイミングイシューだけの話である。

詰まったところ

  1. データ収集ルールの作成時にテーブルが見つからないとエラーが出てしまう

ワークスペース側にはテーブルがあるので、原因がよくわからなかった。
→ 別のサブスクリプションで作成したところ問題なかった…サブスクリプション固有の問題なのだろうか。後でサポートに問い合わせしてみよう。

結論

テンプレートのエクスポートから、jsonを編集することで複数のテーブルにカスタムログが出力可能である。
さらなる拡張検証として、LogAnalytics ワークスペース自体が複数になった時の検証も実施してみたい。

Discussion