Aplaba Cloud Log Service Add-on for Splunk は、Alibaba Cloud Log Service (SLS) からログを収集し、Splunk に送信します。

アーキテクチャ

主な特徴は以下の通りです。
  • Splunk に入力されたデータは、ログをプルし、SLS からのリアルタイムのログ消費をサポートする SLS コンシューマーグループを作成します。
  • データ入力から Splunk インデクサーにログを転送するために、プライベートプロトコルとSplunk HEC の 2 つの代替プロトコルがあります。
Splunk-001

メカニズム

Splunk-002
  • 各データ入力により、1 つのコンシューマーグループに属する 1 つのコンシューマーが作成されます。
  • コンシューマーグループは複数のコンシューマーで構成されています。 コンシューマーグループのコンシューマーは、ログストアからデータを消費します。
  • ログストアには複数のシャードがあります。
    • 1 つのシャードは 1 つのコンシューマーにのみ割り当てることができます。
    • 1 つのコンシューマーが複数のシャードでデータを消費することができます。
  • すべてのコンシューマーの名前は、コンシューマーグループ、ホスト名、プロセス ID、およびイベントプロトコルの組み合わせであるため、コンシューマーグループ内で一意です。

SLS コンシューマーグループの詳細については、「コンシューマーグループ - 使用法」をご参照ください。

準備

  • SLS 用の AccessKey を取得します。

    Alibaba cloud RAMで SLS プロジェクトにアクセスするための AccessKey を取得する必要があります。詳細については、 「AccessKey」および「AccessKey ペアの設定」をご参照ください。

    この目的で、Log Service コンソールの Log Service 権限アシスタントを使用することもできます。 典型的な RAM ポリシーを以下に示します。
    <Project name> を Log Service プロジェクトの名前に置き換えます。 <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、Mac OS、Windows。
    • Splunk のバージョン:Splunk heavy forwarder 8.0 以降、Splunk indexer 7.0 以降。
  • Splunk Enterpriseで HTTP イベントコレクターを設定
    HEC を使用して Splunk にイベントを取り込む場合は、HEC が有効になっていることをご確認ください。 Splunk Heavy Forwarder プライベートプロトコルを直接使用する場合は無視してください。
    現在、Event Collectorトークンを作成するときにインデクサー確認を有効にすることはサポートされていません。

アドオンのインストール

Splunk Web UI からアドオンをインストールするには 2 つの方法があります。
  • 方法 1
    1. Splunk-004 をクリックします。
    2. [他のアプリを閲覧] をクリックします。
    3. キーワード [Alibaba Cloud Log Service Add-on for Splunk] を検索してアドオンを確認し、[インストール] をクリックします。
    4. インストールが完了したら、指示に従って Splunk サービスを再起動します。
  • 方法 2
    1. Splunk-004 をクリックします。
    2. [ファイルからアプリをインストール] をクリックします。
    3. アプリのアップグレードボックスを選択し、[アップロード] をクリックします。

      アプリ検索結果からダウンロードした .tgz ファイルをアップロードします。

    4. インストールが完了したら、指示に従って Splunk サービスを再起動します。

アドオンの設定

  1. Splunk Web UI から Alibaba Cloud Log Service Add-on for Splunk アプリをクリックします。
  2. グローバルアカウント設定:
    アカウントシートの [設定] > [アカウント] をクリックして、SLS AccessKey を設定します。
    グローバルアカウント設定で設定されたユーザー名とパスワードは、AccessKey ID と AccessKey Secret に対応しています。
  3. ログレベルの設定:
    ロギングシートで [設定] > [ロギング] をクリックして、アドオンのログレベルを設定します。
  4. データ入力の追加:
    1. [入力] をクリックします。
    2. [新しい入力を作成] をクリックして新しいデータ入力を作成します。
      表 1. データ入力パラメーター
      パラメーター 必須項目とデータ型 説明 値の例
      name 必須、String データ入力の一意の名前です。 なし
      Interval はい。Integer Splunk データ入力プロセスが予期せず終了したときに回復するための秒単位の時間です。 デフォルト値:10 秒
      index 必須、String Splunk インデックスです。 なし
      SLS AccessKey 必須、String この AccessKey は、AccessKey ID と AccessKey Secret のペアとして生成および使用されます。
      グローバルアカウント設定で設定されたユーザー名とパスワードは、AccessKey ID と AccessKey Secret に対応しています。
      グローバルアカウント設定で設定されたアカウント名です。
      SLS endpoint 必須、String SLS サービスエンドポイント 詳細については、「サービスエンドポイント」をご参照ください。
      • cn-huhehaote.log.aliyuncs.com
      • https://cn-huhehaote.log.aliyuncs.com
      SLS project 必須、String Log Service のプロジェクト。 詳細については、「プロジェクトの管理」をご参照ください。 なし
      SLS logstore 必須、String Log Service のログストアです。 詳細については、「Logstore の作成」をご参照ください。 なし
      SLS consumer group 必須、String ログストアの消費に使用されるコンシューマーグループ名です。 スケーリングするには、複数の入力を同じコンシューマーグループ名で設定することができます。 詳細については、「コンシューマーグループ - 使用法」をご参照ください。 なし
      SLS cursor start time 必須、String データ消費の開始時刻です。 このパラメーターは、コンシューマーグループが初めて作成されるときにのみ有効です。ログは他の時間のために節約ポイントから消費されます。
      時間は、Log Service でのログ到着時間を指しています。
      begin、end、ISO の特定の時間形式 (例:2018-12-26 0:0:0+8:00) の場合があります。
      SLS heartbeat interval はい。Integer コンシューマーと SLS サーバー間のハートビート間隔 (秒) です。 単位:秒。 デフォルト値:60 秒
      SLS data fetch interval はい。Integer 着信データがそれほど頻繁でない場合は、小さすぎないようにご設定ください。 単位: 秒。 デフォルト値:1 秒
      Topic filter 任意、String セミコロン (;) を含むトピックフィルター文字列セパレータです。このトピックフィルター文字列にあるトピックを含むログは無視され、Splunk に送信されます。 このトピックフィルター文字列にあるトピックを含むログは無視され、Splunk に送信されます。 TopicA; TopicB は、TopicA または TopicB のログが無視され、Splunk へ送信されることを意味します。
      Unfolded fields 任意、Json A Json format string which map a topic to a field list. {" topicA": ["field_nameA1", "field_nameA2", ...], "topicB": ["field_nameB1", "field_nameB2", ...], ...} {"actiontrail_audit_event": ["event"] } means than if the topic of a log is "actiontrail_audit_event", the value of the field "event" will be unfolded from string to json.
      Event source 任意、String Splunkでのイベントのソースです。 なし
      Event source type 任意、String Splunk のイベントのソースタイプです。 なし
      Event retry times 任意、Integer 0 は無限再送信を意味します。 デフォルト値: 0
      Event protocol はい Splunk のイベント送信プロトコルです。 プライベートプロトコルが選択されている場合は、以下のパラメーターは無視することができます。
      • HEC の HTTP
      • HEC の HTTPS
      • プライベートプロトコル
      HEC host 必須、イベントプロトコルが HEC の場合のみ。 String HEC のホスト。 詳細については、「Set up and use HTTP Event Collector in Splunk Web」をご参照ください。 なし
      HEC port 必須、イベントプロトコルが HEC の場合のみ。 Integer HEC のポートです。 なし
      HEC token 必須、イベントプロトコルが HEC の場合のみ。 String HEC のトークンです。 詳細については、「HEC token」をご参照ください。 なし
      HEC timeout 必須、イベントプロトコルが HEC の場合のみ。 Integer HECのタイムアウト (秒単位) です。 デフォルト値: 120 秒

始動

  • データを検索
    最初に、上記のステップで設定されているデータ入力を有効にします。 Splunk Web UI から、[検索とレポート] をクリックして、アプリ: 検索とレポートページへ移動すると、Alibaba Cloud Log Service から収集されたログが表示されます。Splunk-003
  • 内部ログ
    • index="_internal" | search "SLS info" コマンドを使用して、SLS の稼働状況を取得します。
    • index="_internal" | search "error" コマンドを使用して、実行時エラーを取得します。

サイジングおよびセキュリティガイド

  • パフォーマンスメトリクス

    データ変換のパフォーマンスと全体は、次のようないくつかの要因によって大きく影響されます。

    • SLS エンドポイント:パブリックネットワーク、クラシックネットワーク、VPC またはインターネットベースのグローバルアクセラレーションにサービスエンドポイントを使用します。 通常、ネットワークが許可する場合は、クラシックネットワークと VPC エンドポイントがパフォーマンスに最適です。 詳細については、「サービスエンドポイント」をご参照ください。
    • 帯域幅:アドオンをホストする SLS と Splunk Heavy Forwarder 間のネットワークの帯域幅、および Splunk Heavy Forwarder とインデクサー間の帯域幅を指します。
    • Splunk インデクサーの機能は、Splunk インデクサーの受信速度です。
    • シャード数:SLS ログストアのシャードが多いほど、データ変換の機能が大きくなります。 シャードの数を指定することができます。 詳細については、「シャードの管理」をご参照ください。
    • 設定されたデータ入力数: 1 つのログストアに対して同じコンシューマーグループ名で設定された入力が多いほど、スループットは大きくなります。
      同時実行コンシューマーの数は、SLSログストアのシャードによって制限されます。
    • Splunk ヘビーフォワーダーのメモリと CPU コアの数: 通常、単一の Splunk データ入力は最大 1〜2 G のメモリと最大 1 つの CPU コアを使用します。

    上記の条件が満たされると、単一の Splunk データ入力が 1 つのコンシューマーを作成し、1〜2 M/s の生ログの消費速度を提供します。 生ログの生成率に基づいてシャードの数を決定する必要があります。

    たとえば、ログストアの生ログの生成速度が 10 M/s の場合は、少なくともログストアの 10 個のシャードを分割し、アドオンと同じ設定で 10 個のデータ入力を設定する必要があります。 マシンには、シングルマシンデプロイモードで 10 個の空き CPU コアと 12 GB のメモリが必要です。

  • 高可用性

    コンシューマーグループは、チェックポイントをサーバーに格納します。 あるコンシューマーのデータ消費プロセスが停止すると、別のコンシューマーが自動的にプロセスを引き継ぎ、最後の消費のチェックポイントからプロセスを続行します。 Splunk データ入力を異なるサーバーに作成することができます。 サーバーが停止または破損した場合は、別のサーバー上の Splunk データ入力が消費プロセスを引き継ぎ、チェックポイントからプロセスを続行することができます。 十分なコンシューマーを用意するために、異なるサーバー上のシャードの数よりも多くの Splunk データ入力を作成することができます。

  • HTTPS
    • Log Service

      HTTPS を使用してアドオンとログサービスの間で送信されるデータを暗号化するには、サービスエンドポイントのプレフィックスを https:// に設定する必要があります (例: https://cn-beijing.log.aliyuncs.com)。

      GlobalSign が発行したサーバー証明書 *.aliyuncs.com です。 ほとんどの Linux および Windows サーバーは、デフォルトでこの証明書を信頼するように事前設定されています。 サーバーがこの証明書を信頼しない場合は、次の Web サイトにアクセスして、有効な証明書をダウンロードおよびインストールすることができます。「Install a trusted root CA or self-signed certificate」をご参照ください。

    • Splunk

      HEC が HTTPS 経由で再生および通信するようにするには、Splunk HEC グローバル設定の [SSLを有効にする] チェックボックスをオンにします。 詳細については、「Configure HTTP Event Collector on Splunk Enterprise」をご参照ください。

  • AccessKey ストレージ保護

    SLS の AccessKey や Splunk の HEC トークンなどのキー情報は、予期しない漏洩を防ぐために Splunk 機密ストレージに保存されます。

よくある質問

  • 設定エラー
    • Web コンソールでデータ入力を追加または変更するときに、いくつかの基本的な設定の検証があります。 詳細については、「表 1」をご参照ください。
    • SLS 設定エラー: たとえば、コンシューマーグループの作成に失敗します。
      • コマンド:index="_internal" | search "error"
      • 例外ログ:
        aliyun.log.consumer.exceptions.ClientWorkerException: 
        error occour when create consumer group, 
        errorCode: LogStoreNotExist, 
        errorMessage: logstore xxxx does not exist
      • ConsumerGroupQuotaExceed

        SLS のログストアごとに最大 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
    • HEC にアクセスする権限がない
      • Command: 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 を有効にする必要があります。
        • イベントコレクタートークンのインデクサー確認が無効になっているかどうかを確認します。
  • 消費の遅延
    • サービスログ機能をオンにすると、次のことができます。
      • Log Service コンソールにログインして、コンシューマーグループのステータスを表示することができます。 詳細については、「サービスログダッシュボード」をご参照ください。
      • CloudMonitor を使用して、コンシューマーグループに関連付けられた遅延を表示し、警告を設定することができます。 詳細については、「アラームの設定」をご参照ください。
    • サービスログ機能が有効になっていない場合は、Log Service コンソールでコンシューマーグループのステータスを表示することができます。 詳細については、「コンシューマーグループ - ステータス表示」をご参照ください。

    パフォーマンスメトリクスを参照して、同じコンシューマーグループの下でより多くのシャードを分割したり、より多くのデータ入力を作成したりするなどの問題を解決します。

  • ネットワークショック
    • コマンド: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

    通常は自動的に再試行します。 問題が解決しない場合は、チケットを起票し、サポートセンターへお問い合わせください。