本トピックでは、Splunk 向け Alibaba Cloud Log Service アドオンを活用して、Simple Log Service (SLS) から Splunk へログを転送する方法について説明します。
仕組み
データフローは以下のとおりです:
アドオンは Splunk のデータ入力機能を用いて、SLS からリアルタイムでログを消費するコンシューマーグループを作成・管理します。
Splunk Heavy Forwarder は、Splunk 独自プロトコルまたは HTTP Event Collector(HEC)を用いて、ログを Splunk Indexer へ転送します。
本アドオンはデータ収集専用であり、Splunk Heavy Forwarder 上でのみインストールする必要があります。Indexer や Search Head へのインストールは行わないでください。
用語
データ入力とは、ログを消費するコンシューマーのことです。
コンシューマーグループには複数のコンシューマーが含まれます。各コンシューマーは、同一 Logstore 内に格納された異なるログを消費します。
Logstore には複数のシャードが含まれます。
各シャードは、1 つのコンシューマーにのみ割り当てられます。
1 つのコンシューマーは、複数のシャードからデータを消費できます。
コンシューマー名は、各コンシューマーを一意に識別するための識別子であり、コンシューマーグループ名、ホスト名、プロセス ID、およびプロトコルを組み合わせて自動生成されます。これにより、同一グループ内のコンシューマー間で重複した名前が発生することを防ぎます。
コンシューマーグループの詳細については、「コンシューマーグループを用いたログ消費」をご参照ください。
前提条件
SLS へのアクセスに使用する AccessKey ペアを取得します。
SLS プロジェクトへのアクセスには、Resource Access Management (RAM) ユーザーの AccessKey ペアを使用します。詳細については、「AccessKey ペア」をご参照ください。
権限アシスタントを用いて RAM ユーザーに必要な権限を付与します。以下に一般的なポリシー例を示します。
説明<プロジェクト名> および <Logstore 名> を、実際のプロジェクト名および 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/<プロジェクト名>/logstore/<Logstore 名>", "acs:log:*:*:project/<プロジェクト名>/logstore/<Logstore 名>/*" ], "Effect": "Allow" } ] }環境が以下の要件を満たしていることを確認します:
最新バージョンのアドオンを使用していること。
オペレーティングシステムが Linux、macOS、または Windows であること。
Splunk Heavy Forwarder のバージョンが 8.0 以降であり、Splunk Indexer のバージョンが 7.0 以降であること。
Splunk における HEC の構成を行います。
HEC を用いてイベントを Splunk Indexer へ送信する場合、Splunk 上で HEC の構成が完了している必要があります。Splunk 独自プロトコルを用いる場合は、この手順をスキップしてください。
説明HEC トークンを作成する際は、そのトークンに対してインデクサーアックノレッジメント機能を有効化しないでください。
アドオンのインストール
Splunk Web インターフェイスにログインし、アドオンをインストールします。インストールには、以下のいずれかの方法を推奨します。
本アドオンはデータ収集専用です。Splunk Heavy Forwarder 上でのみインストールする必要があります。Splunk Indexer や Search Head へのインストールは不要です。
方法 1
アイコンをクリックします。アプリ ページで、他のアプリを検索 をクリックします。
他のアプリを閲覧 ページで、Splunk 向け Alibaba Cloud Log Service アドオン を検索し、インストール をクリックします。
アドオンのインストールが完了したら、画面の指示に従って Splunk を再起動します。
方法 2
アイコンをクリックします。アプリ ページで、ファイルからアプリをインストール をクリックします。
アプリのアップロード ページで、アップロードする TGZ ファイルを選択し、アップロード をクリックします。
アプリ検索結果 から該当の TGZ ファイルをダウンロードしてください。
インストール をクリックします。
アドオンのインストールが完了したら、画面の指示に従って Splunk を再起動します。
アドオンの構成
Splunk が Elastic Compute Service (ECS) インスタンス上で実行されていない場合、Alibaba Cloud アカウントの AccessKey ペアを用いて SLS にアクセスします。
Splunk Web インターフェイスで、Splunk 向け Alibaba Cloud Log Service アドオン をクリックします。
グローバルアカウントを構成します。
表示されるページで、 を選択します。構成ページで アカウント タブをクリックし、追加 をクリックします。表示される「アカウントの追加」ダイアログボックスで、SLS へのアクセスに使用可能な AccessKey ペアを指定します。
説明各フィールドの対応関係は以下のとおりです:
ユーザー名:AccessKey ID
パスワード:AccessKey Secret
アドオンのログレベルを指定します。
を選択します。構成ページで ログ タブをクリックし、ログレベルのドロップダウンリストから適切なレベルを選択します。
データ入力を作成します。
inputs をクリックして、inputs ページを開きます。
新規入力の作成 をクリックします。「sls_datainput の追加」ダイアログボックスで、データ入力のパラメーターを設定します。
表 1. データ入力のパラメーター
パラメーター
必須/データ型
説明
例
名前
はい、文字列
データ入力の名前です。グローバルに一意である必要があります。
なし。
間隔
はい、整数
プロセスが停止した後に Splunk のデータ入力プロセスを再起動するまでの時間(秒単位)です。
デフォルト値:10。
インデックス
はい、文字列
Splunk のインデックスです。
なし。
SLS AccessKey
はい、文字列
AccessKey ID および AccessKey Secret から構成される Alibaba Cloud の AccessKey ペアです。
説明ユーザー名欄には AccessKey ID を、パスワード欄には対応する AccessKey Secret を入力する必要があります。
グローバルアカウントの構成時に指定した AccessKey ペア。
SLS エンドポイント
はい、文字列
SLS エンドポイントです。
cn-huhehaote.log.aliyuncs.com
https://cn-huhehaote.log.aliyuncs.com
SLS プロジェクト
はい、文字列
SLS プロジェクトの名前です。詳細については、「プロジェクトの管理」をご参照ください。
なし。
SLS Logstore
はい、文字列
SLS Logstore の名前です。詳細については、「Logstore の管理」をご参照ください。
なし。
SLS コンシューマーグループ
はい、文字列
SLS コンシューマーグループの名前です。同一 Logstore に格納されたデータを複数のデータ入力で消費する場合、すべてのデータ入力に同一のコンシューマーグループ名を指定する必要があります。詳細については、「コンシューマーグループを用いたログ消費」をご参照ください。
なし。
SLS カーソル開始時刻
はい、文字列
ログデータの消費を開始する時刻です。このパラメーターは、新しいコンシューマーグループを使用する場合にのみ有効です。既存のコンシューマーグループを使用する場合は、最後のチェックポイントからデータが消費されます。
説明開始時刻は、ログ受信時刻です。
有効な値:begin、end、および ISO 8601 形式の時刻(例:2018-12-26 0:0:0+8:00)。
SLS ハートビート間隔
はい、整数
コンシューマーとサーバー間でハートビートメッセージを送信する間隔(秒単位)です。
デフォルト値:60。
SLS データフェッチ間隔
はい、整数
SLS からログをプルする間隔です。ログの生成頻度が低い場合、このパラメーターを小さな値に設定しないことを推奨します(秒単位)。
デフォルト値:1。
consume_processor
いいえ、文字列
まず、プロジェクト内で SPL を含むコンシューマープロセッサ(例:consume-processor-1)を作成する必要があります。このプロセッサは Linux x86_64 プラットフォームでのみサポートされます。詳細については、「コンシューマープロセッサの管理」をご参照ください。
なし。
トピックフィルター
いいえ、文字列
無視するトピックをセミコロン区切りで指定します。一致するトピックを持つログは Splunk へ送信されません。
TopicA;TopicB(TopicA または TopicB をトピックとするログを無視)。
展開フィールド
いいえ、JSON です。
JSON 形式のログのトピックとフィールドリストとのマッピング関係です。{"topicA": ["field_nameA1", "field_nameA2", ...], "topicB": ["field_nameB1", "field_nameB2", ...], ...}
{"actiontrail_audit_event": ["event"] }(トピックが actiontrail_audit_event のログにおいて、指定されたフィールドの JSON 文字列を展開し、event フィールドに格納)。
イベントソース
いいえ、文字列
Splunk イベントのソースです。
なし。
イベントソースタイプ
いいえ、文字列
Splunk イベントのソースタイプです。
なし。
イベント再試行回数
いいえ、整数
ログデータの消費を再試行する回数です。
デフォルト値:0(無制限の再試行)。
イベントプロトコル
はい、文字列
Splunk イベント送信に使用するプロトコルです。Splunk 独自プロトコルを使用する場合は、下記のパラメーターを構成する必要はありません。
HEC 向け HTTP
HEC 向け HTTPS
プライベートプロトコル
HEC ホスト
はい、文字列
HEC ホストです。これは HEC を用いて Splunk イベントを送信する場合にのみ有効です。詳細については、「Splunk Web における HTTP Event Collector のセットアップと使用」をご参照ください。
なし。
HEC ポート
はい、整数
HEC ポートです。これは HEC を用いて Splunk イベントを送信する場合にのみ有効です。
なし。
HEC トークン
はい、文字列
HEC トークンです。これは HEC を用いて Splunk イベントを送信する場合にのみ有効です。詳細については、「HEC トークン」をご参照ください。
なし。
HEC タイムアウト
はい、整数
HEC タイムアウト期間です。これは HEC を用いて Splunk イベントを送信する場合にのみ有効です(秒単位)。
デフォルト値:120。
Splunk が ECS インスタンス上で実行されている場合、ECS インスタンスに RAM ロールをアタッチします。これにより、ECS インスタンスはその RAM ロールを仮装して SLS にアクセスできます。手順は以下のとおりです:
必要な RAM ロールがアタッチされた ECS インスタンス上で Splunk が実行されていることを確認してください。
ECS インスタンスに RAM ロールをアタッチします。
この手順では、RAM ロールの作成、RAM ロールへの権限付与、および ECS インスタンスへの RAM ロールのアタッチを行います。詳細については、「インスタンス RAM ロールの構成」をご参照ください。
RAM ロールのポリシーについては、「前提条件」に記載のポリシーをご参照ください。
Splunk Web インターフェイスで、Splunk 向け Alibaba Cloud Log Service アドオン をクリックします。
グローバルアカウントを構成します。
表示されるページで、 を選択します。設定ページで、[アカウント] タブをクリックします。このタブで、[追加] をクリックします。アカウントの追加ダイアログボックスで、ECS インスタンスにアタッチされた RAM ロールを指定します。この例では、ユーザー名フィールドに ECS_RAM_ROLE を入力し、パスワードフィールドに、手順 1 で作成した RAM ロールの名前を入力します。
データ入力を作成します。
inputs をクリックして、inputs ページを開きます。
新規入力の作成 をクリックします。「sls_datainput の追加」ダイアログボックスで、データ入力のパラメーターを設定します。
SLS AccessKey パラメーターには、「ステップ 3」で作成したグローバルアカウントを指定する必要があります。その他のパラメーターについては、「データ入力のパラメーター」をご参照ください。
関連操作
データのクエリ
データ入力が「有効」状態であることを確認します。Splunk Web インターフェイスで 検索とレポート をクリックします。アプリ:検索とレポート ページで、収集された監査ログをクエリします。

SLS 運用ログのクエリ
検索ボックスに
index="_internal" | search "SLS info"を入力して、SLS の info ログをクエリします。検索ボックスに
index="_internal" | search "error"を入力して、SLS のエラーログをクエリします。
パフォーマンスとセキュリティ
パフォーマンス
アドオンのパフォーマンスおよびデータ転送スループットは、以下の要因によって異なります:
エンドポイント:SLS へのアクセスには、パブリックエンドポイント、クラシックネットワークエンドポイント、VPC エンドポイント、またはアクセラレーションエンドポイントを使用できます。ほとんどの場合、クラシックネットワークエンドポイントまたは VPC エンドポイントの使用を推奨します。詳細については、「エンドポイント」をご参照ください。
帯域幅:SLS と Splunk Heavy Forwarder 間、および Splunk Heavy Forwarder と Indexer 間のデータ転送帯域幅がパフォーマンスに影響します。
Splunk Indexer の処理能力:Indexer が Splunk Heavy Forwarder からデータを受信する能力がパフォーマンスに影響します。
シャード数:Logstore のシャード数が多いほど、データ転送能力が高くなります。シャード数は、生ログの生成速度に基づいて指定する必要があります。詳細については、「シャードの管理」をご参照ください。
Splunk データ入力数:Logstore に対して構成されたコンシューマーグループ内に存在するデータ入力数が多いほど、スループットが高くなります。
説明ログデータの同時消費は、Logstore のシャード数に応じて変化します。
リソース消費:一般的なガイドラインとして、各データ入力は Heavy Forwarder 上で約 1 CPU コアおよび 1–2 GB のメモリを消費します。
十分なリソースが確保されている場合、単一のデータ入力で 1–2 MB/s のスループットを達成できます。シャード数は、生ログの生成速度に基づいて指定する必要があります。
たとえば、ログが毎秒 10 MB の速度で Logstore に書き込まれる場合、Logstore には最低 10 個のシャードを作成し、アドオンには 10 個のデータ入力を構成する必要があります。アドオンを単一サーバー上にデプロイする場合、そのサーバーには 10 個のアイドル CPU コアおよび 12 GB の利用可能なメモリリソースがあることを確認してください。
高可用性
コンシューマーグループは、チェックポイントをサーバー側に保存します。コンシューマーがデータの消費を停止すると、別のコンシューマーが最後のチェックポイントからデータの消費を継続します。複数のサーバー上で Splunk データ入力を作成できます。あるサーバーが停止または障害を起こした場合、別のサーバー上の Splunk データ入力が最後のチェックポイントからデータの消費を継続します。理論的には、複数のサーバー上で起動される Splunk データ入力の数は、シャード数を超えることが可能であり、例外発生時に最後のチェックポイントからデータを消費できるようになります。
HTTPS を用いたデータ転送
SLS
プログラムと SLS 間のデータ転送を HTTPS で暗号化するには、エンドポイントが https:// で始まっていることを確認します(例:https://cn-beijing.log.aliyuncs.com)。
*.aliyuncs.com のサーバー証明書は GlobalSign により発行されています。デフォルトでは、ほとんどの Linux サーバーおよび Windows サーバーがこの証明書を信頼するように事前に構成されています。サーバーがこの証明書を信頼しない場合は、「信頼されたルート CA または自己署名証明書のインストール」をご参照ください。
Splunk
HTTPS を用いた HEC を使用するには、グローバル設定ダイアログボックスで HEC を有効化する際に SSL 機能を有効化します。詳細については、「Splunk Enterprise における HTTP Event Collector の構成」をご参照ください。
AccessKey ペアのストレージの保護
SLS および HEC トークンへのアクセスに使用する AccessKey ペアは、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 エラー
Logstore ごとに最大 20 個のコンシューマーグループを構成できます。SLS コンソールでコンシューマーグループを確認し、不要になったコンシューマーグループを削除することを推奨します。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 サービス」に設定され、選択された信頼できるサービスが「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 を用いる場合、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 カーソル開始時刻パラメーターは、新しいコンシューマーグループを使用する場合にのみ有効です。既存のコンシューマーグループを使用する場合は、最後のチェックポイントからデータが消費されます。
Splunk Web インターフェイスの inputs ページで、関連するデータ入力を無効化します。
Simple Log Service コンソール にログインします。データが消費される Logstore を特定し、データ消費 セクションで関連するコンシューマーグループを削除します。
Splunk Web インターフェイスの inputs ページで、該当のデータ入力を特定し、 を選択します。表示されるダイアログボックスで、SLS カーソル開始時刻 パラメーターを変更し、データ入力を有効化します。