本トピックでは、Alibaba Cloud Log Service Add-on for Splunk を使用して、Simple Log Service (SLS) のログを Splunk に転送する方法について説明します。
仕組み
データフローは以下の通りです。
このアドオンは、Splunk のデータ入力を使用して、SLS からリアルタイムでログを消費するコンシューマーグループを作成・管理します。
Splunk ヘビーフォワーダーは、Splunk プライベートプロトコルまたは HTTP イベントコレクター (HEC) を使用して、ログを Splunk インデクサーに転送します。
これはデータ収集用のアドオンであり、Splunk ヘビーフォワーダーにのみインストールする必要があります。インデクサーやサーチヘッドにはインストールしないでください。
用語
データ入力とは、ログを消費するコンシューマーです。
コンシューマーグループには、複数のコンシューマーが含まれます。コンシューマーグループ内の各コンシューマーは、1 つの Logstore に保存されている異なるログを消費します。
Logstore には複数のシャードが含まれます。
各シャードは、1 つのコンシューマーにのみ割り当てることができます。
1 つのコンシューマーは、複数のシャードからデータを消費できます。
コンシューマー名は、各コンシューマーの一意の識別子であり、コンシューマーグループ名、ホスト名、プロセス ID、プロトコルを組み合わせて自動的に生成されます。これにより、同じグループ内の 2 つのコンシューマーが同じ名前を持つことはありません。
コンシューマーグループの詳細については、「コンシューマーグループを使用したログの消費」をご参照ください。
前提条件
SLS へのアクセスに使用する AccessKey ペアを取得します。
Resource Access Management (RAM) ユーザーの AccessKey ペアを使用して SLS プロジェクトにアクセスします。詳細については、「AccessKey ペア」をご参照ください。
権限アシスタントを使用して、RAM ユーザーに権限を付与します。以下に一般的なポリシーの例を示します。
説明<Project name> と <Logstore name> を実際のプロジェクト名と Logstore 名に置き換えてください。ワイルドカード (*) がサポートされています。
{ "Version": "1", "Statement": [ { "Action": [ "log:ListShards", "log:GetCursorOrData", "log:GetConsumerGroupCheckPoint", "log:UpdateConsumerGroup", "log:ConsumerGroupHeartBeat", "log:ConsumerGroupUpdateCheckPoint", "log:ListConsumerGroup", "log:CreateConsumerGroup" ], "Resource": [ "acs:log:*:*:project/<Project name>/logstore/<Logstore name>", "acs:log:*:*:project/<Project name>/logstore/<Logstore name>/*" ], "Effect": "Allow" } ] }ご利用の環境が以下の要件を満たしていることを確認します。
アドオンの最新バージョンが使用されていること。
オペレーティングシステムが Linux、macOS、または Windows であること。
Splunk ヘビーフォワーダーのバージョンが 8.0 以降、Splunk インデクサーのバージョンが 7.0 以降であること。
HEC を使用して Splunk インデクサーにイベントを送信する場合は、Splunk で HEC が設定されていることを確認してください。Splunk プライベートプロトコルを使用して Splunk インデクサーにイベントを送信する場合は、このステップをスキップしてください。
説明HEC トークンを作成する際、トークンのインデクサー確認応答機能を有効にしないでください。
アドオンのインストール
Splunk の Web インターフェイスにログインし、アドオンをインストールします。アドオンをインストールするには、以下のいずれかの方法を推奨します。
このアドオンはデータ収集にのみ使用されます。Splunk ヘビーフォワーダーにアドオンをインストールする必要があります。Splunk インデクサーやサーチヘッドにアドオンをインストールする必要はありません。
方法 1
アイコンをクリックします。Apps ページで、[Find More Apps] をクリックします。
Browse More Apps ページで、Alibaba Cloud Log Service Add-on for Splunk を検索し、[Install] をクリックします。
アドオンがインストールされた後、プロンプトに従って Splunk を再起動します。
方法 2
アイコンをクリックします。Apps ページで、[Install app from file] をクリックします。
Upload app ページで、アップロードしたい TGZ ファイルを選択し、[Upload] をクリックします。
App Search Results をクリックし、必要な TGZ ファイルをダウンロードします。
「[インストール]」をクリックします。
アドオンがインストールされた後、プロンプトに従って Splunk を再起動します。
アドオンの設定
Splunk が Elastic Compute Service (ECS) インスタンス上で実行されていない場合は、Alibaba Cloud アカウントの AccessKey ペアを使用して SLS にアクセスします。
Splunk の Web インターフェイスで、[Alibaba Cloud Log Service Add-on for Splunk] をクリックします。
グローバルアカウントを設定します。
表示されたページで、 を選択します。[Configuration] ページで、[Account] タブをクリックします。このタブで、[Add] をクリックします。[Add Account] ダイアログボックスで、SLS へのアクセスに使用できる AccessKey ペアを指定します。
説明フィールドは次のようにマッピングされます:
Username:ご利用の AccessKey ID。
Password:ご利用の AccessKey Secret。
アドオンログのレベルを指定します。
を選択します。[Configuration] ページで、[Logging] タブをクリックします。このタブで、[Log level] ドロップダウンリストからレベルを選択します。
データ入力を作成します。
[inputs] をクリックして [inputs] ページを開きます。
[Create New Input] をクリックします。[Add sls_datainput] ダイアログボックスで、データ入力のパラメーターを設定します。
表 1. データ入力のパラメーター
パラメーター
必須/データの型
説明
例
Name
はい、文字列
データ入力の名前。グローバルで一意である必要があります。
なし。
Interval
はい、整数
Splunk データ入力プロセスが停止した後に再起動するまでの時間。単位:秒。
デフォルト値:10。
Index
はい、文字列
Splunk インデックス。
なし。
SLS AccessKey
はい、文字列
AccessKey ID と AccessKey Secret から構成される Alibaba Cloud AccessKey ペア。
説明[Username] フィールドに AccessKey ID を、[Password] フィールドに関連する AccessKey Secret を入力する必要があります。
グローバルアカウントの設定時に入力した AccessKey ペア。
SLS endpoint
はい、文字列
cn-huhehaote.log.aliyuncs.com
https://cn-huhehaote.log.aliyuncs.com
SLS project
はい、文字列
SLS プロジェクトの名前。詳細については、「プロジェクトの管理」をご参照ください。
なし。
SLS logstore
はい、文字列
SLS Logstore の名前。詳細については、「Logstore の管理」をご参照ください。
なし。
SLS consumer group
はい、文字列
SLS コンシューマーグループの名前。複数のデータ入力を使用して同じ Logstore に保存されているデータを消費する場合、データ入力に同じコンシューマーグループ名を指定する必要があります。詳細については、「コンシューマーグループを使用したログの消費」をご参照ください。
なし。
SLS cursor start time
はい、文字列
ログデータ消費の開始時刻。このパラメーターは、新しいコンシューマーグループを使用する場合にのみ有効です。既存のコンシューマーグループを使用する場合、データは最後のチェックポイントから消費されます。
説明開始時刻はログの受信時刻です。
有効な値:begin、end、および ISO 8601 形式の時刻値。例:2018-12-26 0:0:0+8:00。
SLS heartbeat interval
はい、整数
コンシューマーとサーバー間でハートビートメッセージが送信される間隔。単位:秒。
デフォルト値:60。
SLS data fetch interval
はい、整数
SLS からログをプルする間隔。ログの生成頻度が低い場合は、このパラメーターを小さい値に設定しないことを推奨します。単位:秒。
デフォルト値:1。
consume_processor
いいえ、文字列
まず、プロジェクトに SPL を含むコンシューマープロセッサー (例:consume-processor-1) を作成する必要があります。このプロセッサーは Linux x86_64 プラットフォームでのみサポートされています。詳細については、「コンシューマープロセッサーの管理」をご参照ください。
なし。
Topic filter
いいえ、文字列
無視する Topic のセミコロン区切りのリスト。一致する Topic を持つログは Splunk に送信されません。
TopicA;TopicB。この値は、Topic が TopicA または TopicB であるログが無視されることを指定します。
Unfolded fields
いいえ、JSON
JSON 形式のログの Topic とフィールドリストとのマッピング関係。{"topicA": ["field_nameA1", "field_nameA2", ...], "topicB": ["field_nameB1", "field_nameB2", ...], ...}
{"actiontrail_audit_event": ["event"] }。この値は、Topic が actiontrail_audit_event であるログにおいて、指定されたフィールドの JSON 文字列が展開され、event フィールドに保存されることを指定します。
Event source
いいえ、文字列
Splunk イベントのソース。
なし。
Event source type
いいえ、文字列
Splunk イベントのソースのタイプ。
なし。
Event retry times
いいえ、整数
ログデータを消費するためのリトライ回数。
デフォルト値:0。無制限のリトライを指定します。
Event protocol
はい、文字列
Splunk イベントの送信に使用されるプロトコル。Splunk プライベートプロトコルを使用して Splunk イベントを送信する場合、表の以下のパラメーターを設定する必要はありません。
HTTP for HEC
HTTPS for HEC
Private protocol
HEC host
はい、文字列
HEC ホスト。このパラメーターは、HEC を使用して Splunk イベントを送信する場合にのみ有効です。詳細については、「Splunk Web で HTTP イベントコレクターをセットアップして使用する」をご参照ください。
なし。
HEC port
はい、整数
HEC ポート。このパラメーターは、HEC を使用して Splunk イベントを送信する場合にのみ有効です。
なし。
HEC token
はい、文字列
HEC トークン。このパラメーターは、HEC を使用して Splunk イベントを送信する場合にのみ有効です。詳細については、「HEC トークン」をご参照ください。
なし。
HEC timeout
はい、整数
HEC タイムアウト期間。このパラメーターは、HEC を使用して Splunk イベントを送信する場合にのみ有効です。単位:秒。
デフォルト値:120。
Splunk が ECS インスタンス上で実行されている場合は、RAM ロールを ECS インスタンスにアタッチします。その後、ECS インスタンスは RAM ロールを偽装して SLS にアクセスできます。手順:
必要な RAM ロールがアタッチされている ECS インスタンス上で Splunk が実行されていることを確認してください。
RAM ロールを ECS インスタンスにアタッチします。
このステップでは、RAM ロールを作成し、RAM ロールに権限を付与してから、RAM ロールを ECS インスタンスにアタッチします。詳細については、「インスタンス RAM ロールの設定」をご参照ください。
RAM ロールのポリシーの詳細については、「前提条件」のポリシーをご参照ください。
Splunk の Web インターフェイスで、[Alibaba Cloud Log Service Add-on for Splunk] をクリックします。
グローバルアカウントを設定します。
表示されたページで、 を選択します。[Configuration] ページで、[Account] タブをクリックします。このタブで、[Add] をクリックします。[Add Account] ダイアログボックスで、ECS インスタンスにアタッチされた RAM ロールを指定します。この例では、[Username] フィールドに ECS_RAM_ROLE を入力し、[Password] フィールドに ステップ 1 で作成した RAM ロールの名前を入力します。
データ入力を作成します。
[inputs] をクリックして [inputs] ページを開きます。
[Create New Input] をクリックします。[Add sls_datainput] ダイアログボックスで、データ入力のパラメーターを設定します。
SLS AccessKey パラメーターを ステップ 3 で作成したグローバルアカウントに設定する必要があります。その他のパラメーターの詳細については、「データ入力のパラメーター」をご参照ください。
関連操作
データのクエリ
データ入力が [Enabled] 状態であることを確認します。Splunk の Web インターフェイスで、[Search & Reporting] をクリックします。App: Search & Reporting ページで、収集された監査ログをクエリします。

SLS 操作ログのクエリ
検索ボックスに
index="_internal" | search "SLS info"と入力して、SLS の情報ログをクエリします。検索ボックスに
index="_internal" | search "error"と入力して、SLS のエラーログをクエリします。
パフォーマンスとセキュリティ
パフォーマンス
アドオンのパフォーマンスとデータ転送スループットは、以下の要因によって異なります:
エンドポイント:パブリック、クラシックネットワーク、Virtual Private Cloud (VPC)、またはグローバルアクセラレーションエンドポイントを使用して SLS にアクセスします。ほとんどの場合、クラシックネットワークエンドポイントまたは VPC エンドポイントを使用することを推奨します。詳細については、「エンドポイント」をご参照ください。
帯域幅:SLS と Splunk ヘビーフォワーダー間、および Splunk ヘビーフォワーダーとインデクサー間のデータ転送の帯域幅がパフォーマンスに影響します。
Splunk インデクサーの処理能力:Splunk ヘビーフォワーダーからデータを受信するインデクサーの能力がパフォーマンスに影響します。
シャード数:Logstore 内のシャード数が多いほど、データ転送能力が高くなります。生のログが生成される速度に基づいてシャード数を指定する必要があります。詳細については、「シャードの管理」をご参照ください。
Splunk データ入力数:Logstore に設定されたコンシューマーグループ内のデータ入力数が多いほど、スループットが高くなります。
説明ログデータの同時消費は、Logstore 内のシャード数によって異なります。
リソース消費:一般的なガイドラインとして、各データ入力はヘビーフォワーダー上で約 1 CPU コアと 1~2 GB のメモリを消費します。
十分なリソースがあれば、単一のデータ入力で 1~2 MB/s のスループットを達成できます。生のログが生成される速度に基づいてシャード数を指定する必要があります。
たとえば、ログが 1 秒あたり 10 MB の速度で Logstore に書き込まれる場合、Logstore に少なくとも 10 個のシャードを作成し、アドオンに 10 個のデータ入力を設定する必要があります。アドオンを単一のサーバーにデプロイする場合、そのサーバーに 10 個のアイドル CPU コアと 12 GB の利用可能なメモリリソースがあることを確認してください。
高可用性
コンシューマーグループは、サーバー側にチェックポイントを保存します。あるコンシューマーがデータ消費を停止すると、別のコンシューマーが最後のチェックポイントからデータ消費を続行します。複数のサーバーに Splunk データ入力を作成できます。あるサーバーが停止または破損した場合、別のサーバー上の Splunk データ入力が最後のチェックポイントからデータ消費を続行します。理論的には、複数のサーバーで起動される Splunk データ入力の数はシャードの数より多くすることができ、これにより例外発生時に最後のチェックポイントからデータが消費されることが保証されます。
HTTPS ベースのデータ転送
SLS
HTTPS を使用してプログラムと SLS 間のデータを暗号化するには、エンドポイントのプレフィックスが https:// であることを確認してください。例:https://cn-beijing.log.aliyuncs.com。
*.aliyuncs.com サーバー証明書は GlobalSign によって発行されます。デフォルトでは、ほとんどの Linux および Windows サーバーはこの証明書を信頼するように事前設定されています。サーバーがこの証明書を信頼しない場合は、「信頼されたルート CA または自己署名証明書のインストール」をご参照ください。
Splunk
HTTPS ベースの HEC を使用するには、[グローバル設定ダイアログボックス] で HEC を有効化する際に SSL 機能を有効化します。詳細については、「Configure HTTP Event Collector on Splunk Enterprise」をご参照ください。
AccessKey ペアのストレージ保護
SLS へのアクセスに使用する AccessKey ペアと HEC トークンは、Splunk 内で暗号化されて保存されます。これにより、データ漏洩を防ぎます。
よくある質問
設定エラーが発生した場合はどうすればよいですか?
データ入力の作成または変更時に、データ入力で設定エラーが発生することがあります。この場合、データ入力の基本設定を確認してください。パラメーターの詳細については、「データ入力のパラメーター」をご参照ください。
SLS で設定エラーが発生することがあります。たとえば、システムがコンシューマーグループの作成に失敗した場合などです。この場合、SLS の設定を確認してください。
コマンド:
index="_internal" | search "error"エラーログ:
aliyun.log.consumer.exceptions.ClientWorkerException: error occour when create consumer group, errorCode: LogStoreNotExist, errorMessage: logstore xxxx does not existConsumerGroupQuotaExceed エラー
1 つの Logstore につき、最大 20 個のコンシューマーグループを設定できます。SLS コンソールでコンシューマーグループを表示し、不要になったコンシューマーグループを削除することを推奨します。1 つの Logstore に 20 個を超えるコンシューマーグループが設定されている場合、ConsumerGroupQuotaExceed エラーが報告されます。
権限エラーが発生した場合はどうすればよいですか?
SLS へのアクセスが許可されていません。権限を確認してください。
コマンド:
index="_internal" | search "error"エラーログ:
aliyun.log.consumer.exceptions.ClientWorkerException: error occour when create consumer group, errorCode: SignatureNotMatch, errorMessage: signature J70VwxYH0+W/AciA4BdkuWxK6W8= not match
ECS インスタンスの RAM 認証に失敗しました。
コマンド:
index="_internal" | search "error"エラーログ:
ECS RAM Role detected in user config, but failed to get ECS RAM credentials. Please check if ECS instance and RAM role 'ECS-Role' are configured appropriately.ECS-Role は作成した RAM ロールです。ECS-Role 変数は実際の値として表示されます。
トラブルシューティング:
データ入力の SLS AccessKey パラメーターが、RAM ロールを持つグローバルアカウントとして設定されているか確認してください。
RAM ロールがグローバルアカウントに正しく設定されているか確認してください。ユーザー名は ECS_RAM_ROLE に、パスワードは RAM ロールの名前に設定する必要があります。
RAM ロールが ECS インスタンスにアタッチされているか確認してください。
RAM ロールの信頼できるエンティティタイプが Alibaba Cloud Service に設定されているか確認してください。選択された信頼できるサービスが ECS であるか確認してください。
RAM ロールがアタッチされている ECS インスタンスが、Splunk が実行されている ECS インスタンスであるか確認してください。
HEC へのアクセスが許可されていません。
コマンド:
index="_internal" | search "error"エラーログ:
ERROR HttpInputDataHandler - Failed processing http input, token name=n/a, channel=n/a, source_IP=127.0.0.1, reply=4, events_processed=0, http_input_body_size=369 WARNING pid=48412 tid=ThreadPoolExecutor-0_1 file=base_modinput.py:log_warning:302 | SLS info: Failed to write [{"event": "{\"__topic__\": \"topic_test0\", \"__source__\": \"127.0.0.1\", \"__tag__:__client_ip__\": \"10.10.10.10\", \"__tag__:__receive_time__\": \"1584945639\", \"content\": \"goroutine id [0, 1584945637]\", \"content2\": \"num[9], time[2020-03-23 14:40:37|1584945637]\"}", "index": "main", "source": "sls log", "sourcetype": "http of hec", "time": "1584945637"}] remote Splunk server (http://127.0.0.1:8088/services/collector) using hec. Exception: 403 Client Error: Forbidden for url: http://127.0.0.1:8088/services/collector, times: 3考えられる原因:
HEC が設定または開始されていません。
データ入力の HEC 関連パラメーターが無効です。たとえば、HTTPS ベースの HEC を使用する場合、SSL 機能を有効にする必要があります。
HEC トークンのインデクサー確認応答機能が無効になっています。
消費の遅延を解決するにはどうすればよいですか?
SLS コンソールでコンシューマーグループのステータスを確認します。
シャードの数を増やすか、同じコンシューマーグループにさらに多くのデータ入力を作成することを推奨します。詳細については、「パフォーマンスとセキュリティ」をご参照ください。
ネットワークジッターが発生した場合はどうすればよいですか?
コマンド:
index="_internal" | search "SLS info: Failed to write"エラーログ:
WARNING pid=58837 tid=ThreadPoolExecutor-0_0 file=base_modinput.py:log_warning:302 | SLS info: Failed to write [{"event": "{\"__topic__\": \"topic_test0\", \"__source__\": \"127.0.0.1\", \"__tag__:__client_ip__\": \"10.10.10.10\", \"__tag__:__receive_time__\": \"1584951417\", \"content2\": \"num[999], time[2020-03-23 16:16:57|1584951417]\", \"content\": \"goroutine id [0, 1584951315]\"}", "index": "main", "source": "sls log", "sourcetype": "http of hec", "time": "1584951417"}] remote Splunk server (http://127.0.0.1:8088/services/collector) using hec. Exception: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')), times: 3
ネットワークジッターが発生した場合、Splunk イベントは自動的に再送信されます。問題が解決しない場合は、ネットワーク管理者にお問い合わせください。
消費の開始時刻を変更するにはどうすればよいですか?
説明SLS cursor start time パラメーターは、新しいコンシューマーグループを使用する場合にのみ有効です。既存のコンシューマーグループを使用する場合、データは最後のチェックポイントから消費されます。
Splunk Web インターフェイスの [inputs] ページで、関連するデータ入力を無効にします。
Simple Log Service コンソールにログインします。データが消費される Logstore を見つけ、[データ消費] セクションで関連するコンシューマーグループを削除します。
Splunk Web インターフェイスの [inputs] ページで、データ入力を見つけ、 を選択します。表示されるダイアログボックスで、SLS cursor start time パラメーターを変更します。その後、データ入力を有効にします。