このアドオンを使用すると、Log Service から Splunk へリアルタイムでログをストリーミングできます。
仕組み
このアドオンは、以下の処理を実行します。
-
Splunk データ入力を通じて Simple Log Service コンシューマーグループを作成し、Simple Log Service からログをリアルタイムで取り込みます。
-
収集したログを、Splunk プライベートプロトコルまたは HTTP イベントコレクター (HEC) を使用して Splunk インデクサーに配信します。
これはデータ収集アドオンです。Splunk ヘビーフォワーダーにのみインストールしてください。インデクサーやサーチヘッドにはインストールしないでください。
基本概念
-
データ入力は、ログを取り込むコンシューマーとして機能します。
-
コンシューマーグループには、Logstore からデータを共同で取り込む複数のコンシューマーが含まれます。重複を防ぐため、各ログは 1 つのコンシューマーのみが処理します。
-
Logstore には複数のシャードが含まれます。
-
各シャードは 1 つのコンシューマーにのみ割り当てられます。
-
1 つのコンシューマーに複数のシャードを割り当てることもできます。
-
-
各コンシューマー名は、コンシューマーグループ名、ホスト名、プロセス名、およびイベントプロトコルタイプを組み合わせることで、グループ内での一意性が保証されます。
前提条件
-
Log Service の AccessKey ペアを取得してください。
Alibaba Cloud Resource Access Management (RAM) を使用して、Log Service プロジェクトの AccessKey ペアを取得します。AccessKey ペア。
権限アシスタントを使用して RAM 権限を設定します。権限アシスタントを設定する。次のコードは、一般的な RAM ポリシーを示しています:
説明<Project name>と<LogStore name>を実際の名前に置き換えてください。ワイルドカード (*) を使用できます。{ "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" } ] } -
Splunk のバージョンとランタイム環境を確認してください。
-
アドオンは最新バージョンを使用してください。
-
オペレーティングシステム: Linux、macOS、または Windows。
-
Splunk のバージョン: Splunk ヘビーフォワーダー 8.0 以降、および Splunk インデクサー 7.0 以降。
-
-
Splunk HTTP Event Collector (HEC) を設定してください。Splunk Enterprise で HTTP Event Collector を設定する。
HEC を使用する場合にのみ必要です。Splunk のプライベートプロトコルを使用する場合は、この手順をスキップしてください。
説明Event Collector トークンを作成する場合、インデクサー確認応答機能はサポートされません。
-
Kubernetes クラスターのコンテナログ収集を完了してください。
ログを Splunk に配信する前に、Kubernetes クラスターのコンテナログ収集が完了していること、および Log Service にコンテナログが収集済みであることを確認してください。 (推奨) ACK クラスターに LoongCollector または Logtail を DaemonSet としてデプロイし、コンテナの標準出力とログファイルを Log Service に収集します。 詳細については、「Kubernetes コンテナログ収集」をご参照ください。
説明Log Service にコンテナログが収集済みである場合にのみ、Splunk アドオンを使用してログを Splunk に配信できます。
アドオンのインストール
Splunk Web UI にログインし、次のいずれかの方法でアドオンをインストールします。
これはデータ収集用のアドオンです。Splunk ヘビーフォワーダーにのみインストールしてください。インデクサーまたはサーチヘッドにはインストールしないでください。
-
方法 1:Splunkbase からインストール
-
[
] アイコンをクリックします。 -
適用 ページで、[Browse more apps] をクリックします。
-
Alibaba Cloud Log Service Add-on for Splunk を検索し、インストール をクリックします。
-
プロンプトに従って Splunk サービスを再起動します。
-
-
方法 2:ファイルからインストール
-
[
] アイコンをクリックします。 -
適用 ページで、[Install app from file] をクリックします。
-
対象の .tgz ファイルを選択し、[Upload] をクリックします。
対象の .tgz ファイルはSplunkbase からダウンロードできます。
-
インストール をクリックします。
-
プロンプトに従って Splunk サービスを再起動します。
-
アドオンの設定
Splunk が Alibaba Cloud ECS インスタンス上で実行されていない場合は、AccessKey ペアを使用して Log Service にアクセスします:
-
Splunk の Web UI で、[Alibaba Cloud Log Service Add-on for Splunk] をクリックします。
-
グローバルアカウントを設定します。
タブに移動し、Log Service 用の [AccessKey ペア] を設定します。
説明[Username] および [Password] フィールドは、Log Service の AccessKey ID および AccessKey Secret に対応します。
-
アドオンのログレベルを設定します。
タブに移動し、アドオンの [ロギングレベル] を設定します。
-
データ入力を作成します。
-
入力 をクリックして、入力 ページに移動します。
-
[新規入力の作成] をクリックして、新しいデータ入力を作成します。
表 1. データ入力パラメーター
パラメーター
必須/形式
説明
例
Name
必須、文字列
データ入力のグローバルに一意な名前。
なし
間隔
必須、整数
データ入力プロセスが終了した後に再起動するまでの間隔 (秒単位)。
デフォルト値: 10
インデックス
必須、文字列
Splunk インデックス。
なし
SLS AccessKey
必須、文字列
Alibaba Cloud の AccessKey ペア (AccessKey ID と AccessKey Secret)。
説明[Username] および [Password] フィールドは、Log Service の AccessKey ID および AccessKey Secret に対応します。
グローバルアカウントに設定されたユーザー名とパスワード。
SLS エンドポイント
必須、文字列
Log Service のエンドポイントです。詳細については、エンドポイントをご参照ください。
-
cn-huhehaote.log.aliyuncs.com -
https://cn-huhehaote.log.aliyuncs.com
SLS プロジェクト
必須、文字列
Log Service のプロジェクトです。詳細については、プロジェクトの管理をご参照ください。
なし
SLS Logstore
必須、文字列
Log Service の Logstore。詳細については、「Logstore の管理」をご参照ください。
なし
SLS コンシューマーグループ
必須、文字列
Log Service のコンシューマーグループ。 スケールアウトするには、複数のデータ入力で同じコンシューマーグループ名を使用します。詳細については、コンシューマーグループを使用したログの取り込みをご参照ください。
なし
SLS カーソル開始時間
必須、文字列
ログの取り込み開始時間。コンシューマーグループが最初に作成された場合にのみ適用されます。 既存のコンシューマーグループは、最後に保存されたチェックポイントから再開します。
説明この時間は、ログがサーバーに到着した時間に基づきます。
有効な値:
begin、end、または ISO 8601 形式の時間 (例:2018-12-26 0:0:0+8:00)。SLS ハートビート間隔
必須、整数
コンシューマーとサーバー間のハートビート間隔 (秒単位)。
デフォルト値: 60
SLS データフェッチ間隔
必須、整数
ログをプルする間隔 (秒単位)。ログの頻度が低い場合は、小さい値を避けてください。
デフォルト値: 1
コンシューマープロセッサー
任意、文字列
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のログの場合、ログのeventフィールドの文字列が JSON オブジェクトに展開されることを意味します。イベントソース
任意、文字列
Splunk イベントのデータソース。
なし
イベントソースタイプ
任意、文字列
Splunk イベントのソースタイプ。
なし
イベントリトライ回数
任意、整数
無制限のリトライには
0を設定します。デフォルト値: 0
イベントプロトコル
必須
Splunk イベントを送信するためのプロトコル。 [Private Protocol] を選択した場合、以下の HEC パラメーターは適用されません。
-
HEC 用 HTTP
-
HEC 用 HTTPS
-
プライベートプロトコル
HEC ホスト
必須、文字列。 [イベントプロトコル] が HEC オプションに設定されている場合にのみ有効です。
HEC ホストです。詳細については、Splunk Web での HTTP Event Collector のセットアップと使用をご参照ください。
なし
HEC ポート
必須、整数。 [イベントプロトコル] が HEC オプションに設定されている場合にのみ有効です。
HEC ポート。
なし
HEC トークン
必須、文字列。 [イベントプロトコル] が HEC オプションに設定されている場合にのみ有効です。
HEC トークンです。詳細については、Event Collector トークンについてをご参照ください。
なし
HEC タイムアウト
必須、整数。 [イベントプロトコル] が HEC オプションに設定されている場合にのみ有効です。
HEC のタイムアウト期間 (秒単位)。
デフォルト値: 120
-
-
Splunk が Alibaba Cloud ECS インスタンス上で実行されている場合は、インスタンスに RAM ロールをアタッチして Log Service にアクセスします:
Splunk が、RAM ロールがアタッチされている ECS インスタンス上で実行されていることを確認してください。
-
インスタンスに RAM ロールをアタッチします。
RAM ロールを作成し、権限を付与して、ECS インスタンスにアタッチします。詳細については、インスタンス RAM ロールの設定をご参照ください。
RAM ロールの権限ポリシーについては、「前提条件」セクションのポリシーをご参照ください。
-
Splunk の Web UI で、[Alibaba Cloud Log Service Add-on for Splunk] をクリックします。
-
グローバルアカウントを設定します。
タブに移動し、ECS インスタンスの RAM ロール情報を設定します。ユーザー名を
ECS_RAM_ROLEに、パスワードを ステップ 1 で作成した RAM ロールの名前に設定してアカウントを追加します。 -
データ入力を作成します。
-
入力 をクリックして、入力 ページに移動します。
-
[新規入力の作成] をクリックして、新しいデータ入力を作成します。
SLS AccessKey パラメーターを、ステップ 3 で作成したグローバルアカウントに設定します。その他のパラメーターについては、「データ入力パラメーター」をご参照ください。
-
ログの検索と表示
-
データの検索
データ入力が有効になっていることを確認してください。 Splunk ホームページで、収集された監査ログをクエリするには、[検索とレポート] をクリックします。
Splunk Enterprise で、[アプリ: 検索 & レポート] アプリを選択します。 検索バーに、すべてのイベントを検索するためのワイルドカードとして
*を入力し、時間範囲を [過去 24 時間] に設定します。 検索結果には、eventName、eventSource、eventTime、sourceIp などのフィールドを含むクラウドプラットフォームの監査ログイベントが JSON 形式で表示されます。 -
内部ログの表示
-
index="_internal" | search "SLS info"を実行して、Log Service (旧称:SLS) 関連の情報を表示します。 -
index="_internal" | search "error"を実行して、実行時エラーメッセージを表示します。
-
パフォーマンスとセキュリティ
-
パフォーマンス仕様
アドオンのスループットには、以下の要素が影響します。
-
エンドポイント:パブリック、クラシックネットワーク、VPC、またはグローバルアクセラレーションエンドポイントを使用します。クラシックネットワークまたは VPC エンドポイントを推奨します。詳細については、「エンドポイント」をご参照ください。
-
帯域幅:Log Service とヘビーフォワーダー間、およびヘビーフォワーダーとインデクサー間の帯域幅。
-
Splunk インデクサーの処理能力。
-
シャード数:シャードが多いほど、データ転送能力が向上します。ソースログの生成レートに基づいて数を設定してください。詳細については、「シャードの管理」をご参照ください。
-
Splunk データ入力の数:同じコンシューマーグループを使用するデータ入力が多いほど、スループットが向上します。
説明コンシューマーの同時実行数は、Log Service の Logstore 内のシャード数の影響を受けます。
-
CPU とメモリ:各データ入力は通常、1~2 GB のメモリと 1 つの CPU コアを使用します。
単一のデータ入力では、1~2 MB/秒 でログを取り込むことができます。ソースログの生成レートに基づいてシャード数を設定してください。
例えば、10 MB/秒 を生成する Logstore には、少なくとも 10 個のシャードと 10 個のデータ入力が必要です。単一のマシンでは、10 個の CPU コアと 12 GB のメモリが必要になります。
-
-
高可用性
コンシューマーグループはサーバー上にチェックポイントを保存するため、コンシューマーが停止した場合でも、別のコンシューマーが最後のチェックポイントから処理を引き継ぎます。冗長性を確保するために、データ入力を複数のマシンに分散してください。さらにフォールトトレランスを高めるには、シャード数よりも多くのデータ入力を起動してください。
-
HTTPS の使用
-
Log Service
エンドポイントが
https://で始まる場合 (例:https://cn-beijing.log.aliyuncs.com) 、Log Service への接続は自動的に HTTPS を使用して暗号化されます。サーバー証明書
*.aliyuncs.comは GlobalSign によって発行されています。デフォルトでは、ほとんどの Linux および Windows マシンはこの証明書を自動的に信頼します。まれにマシンがこの証明書を信頼しない場合は、「信頼されたルート CA または自己署名証明書のインストール」をご参照ください。 -
Splunk
HTTPS 経由で HEC を使用するには、Splunk HEC グローバル設定で SSL を有効にしてください。詳細については、「Splunk Enterprise での HTTP イベントコレクターの設定」をご参照ください。
-
-
AccessKey ペアのストレージ保護
Log Service の AccessKey ペアと Splunk HEC トークンは、認証情報の漏洩を防ぐために、Splunk の暗号化ストレージに保存されます。
トラブルシューティング
-
設定エラー
-
データ入力を作成または変更すると、基本的な設定チェックが実行されます。詳細については、「データ入力パラメータ」をご参照ください。
-
Log Service の設定エラーが発生します (例:コンシューマーグループの作成に失敗するなど)。
-
コマンド:
index="_internal" | search "error" -
エラーログ:
aliyun.log.consumer.exceptions.ClientWorkerException: error occour when create consumer group, errorCode: LogStoreNotExist, errorMessage: logstore xxxx does not exist -
ConsumerGroupQuotaExceed エラー
Logstore は最大 20 個のコンシューマーグループをサポートします。上限に近づいている場合は、Log Service コンソールで不要なコンシューマーグループを削除してください。20 個を超えると、
ConsumerGroupQuotaExceedエラーが発生します。
-
-
-
権限エラー
-
Alibaba Cloud の Log Service へのアクセス権限がない
-
コマンド:
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 ロール名のプレースホルダーです。
-
考えられる原因:
-
データ入力の SLS AccessKey パラメータが、RAM ロールを持つグローバルアカウントを使用するように設定されていることを確認してください。
-
グローバルアカウントが RAM ロール用に正しく設定されていることを確認してください。ユーザー名は
ECS_RAM_ROLE、パスワードは RAM ロール名です。 -
RAM ロールが ECS インスタンスにアタッチされていることを確認してください。
-
RAM ロールの信頼できるエンティティが Alibaba Cloud サービスで、信頼できるサービスが Elastic Compute Service (ECS) であることを確認してください。
-
RAM ロールをアタッチした ECS インスタンスが、Splunk を実行しているマシンと同じであることを確認してください。
-
-
-
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 トークンのインデクサー確認応答機能が無効になっているかどうかを確認してください。
-
-
-
-
消費の遅延
Log Service コンソールでコンシューマーグループのステータスを表示してください。詳細については、「ステップ 2:コンシューマーグループのステータスを表示する」をご参照ください。
消費の遅延を解決するには、シャード数を増やすか、同じコンシューマーグループでより多くのデータ入力を作成してください。詳細については、「パフォーマンス仕様」をご参照ください。
-
ネットワークジッター
-
コマンド:
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
アドオンは自動的にリトライします。問題が解決しない場合は、ネットワーク管理者にお問い合わせください。
-
-
消費開始時刻の変更
説明SLS cursor start timeパラメータは、コンシューマーグループの初回作成時にのみ適用されます。既存のグループは、最後のチェックポイントから再開します。-
Splunk Web UI の 入力 ページで、対象のデータ入力を無効にします。
-
Log Service コンソールにログオンします。 ターゲットログストアの データ消費 セクションで、対応するコンシューマーグループを削除します。
-
Splunk Web UI の 入力 ページで、対象のデータ入力の横にある をクリックして、SLS cursor start time パラメーターを変更し、データ入力を再起動します。
-