Linux でのサードパーティサービスのオートディスカバリー

Linux 環境で動作するサードパーティアプリケーションからデータを収集するための、オートディスカバリーを使用する方法を学習します。

オートディスカバリを使用して、Linux 環境で実行されているサードパーティ製アプリケーション(データベースや Web サーバーなど)を検索できます。オートディスカバリは、これらのアプリケーションからテレメトリデータを収集し、Splunk Observability Cloud に送信します。

注: Collector をバージョン 0.94.0 以上に更新して、自動サービスディスカバリーを有効にします。

自動ディスカバリーの仕組み

Collector をオートディスカバリーで実行すると、オブザーバーエクステンションによってプラットフォーム上で検出されたエンドポイントに対して、サポートされているメトリクスレシーバの組み込み設定をテストします。これは、Collector サービスを開始する前に行われます。

成功基準に一致するメトリクスを取得する、動的にインスタンス化されたレシーバの場合、Collector はディスカバリー設定を、既知の作業ルールと必要なオブザーバー拡張を備えたレシーバクリエータインスタンスに変換します。詳しくは「Receiver creator receiver」を参照してください。同時に、Collector はランタイム時に metrics パイプラインに設定を追加します。

サービスとの接続は確立できるが、期待されるメトリクスを受信できないレシーバに対して、ディスカバリーモードは、どのプロパティを設定すべきか、またはどの拡張機能または設定をサービス上で構成して、正常にテレメトリを取得すべきかを提案します。検出プロセスを調整するために検出プロパティを使用して、必要なターゲット固有の構成値(認証情報など)を定義できます。

Kubernetes で実行する場合、ディスカバリーモードは k8s_observer オブザーバーによって発見されたエンドポイントに対して、バンドルされたメトリクスレシーバの設定をテストします。正常に検出されたインスタンスは、既存のサービス構成に組み込まれます。

アクティブなメトリクスソースを検出する

アクティブでサポートされているメトリクスソースを検出するには、目的のモニタリング・ホスト上で以下のコマンドを実行します:

bin/otelcol --discovery --dry-run
注: オートディスカバリには、環境変数 SPLUNK_REALMSPLUNK_ACCESS_TOKEN がそれぞれ Splunk Observability レルム(たとえば us1)と API トークンを参照する必要があります。あるいは、--config <path_to_config_yaml> オプションを使用することもできます。

--dry-run オプションを使用すると、結果の設定がランタイム時に Collector に適用されないことを保証します。サンプル設定は、代わりに YAML としてコンソールに表示されます。例:

$ Discovering for next 10s...
Partially discovered "smartagent/postgresql" using "docker_observer"
endpoint "5c9c80ba4319395c26255b6374f048ca973d3618fdd4b92a9ed601c7dddbff6a:5432":
Please ensure your user credentials are correctly specified with
`--set splunk.discovery.receivers.smartagent/postgresql.config.params::username="<username>"`
and `--set splunk.discovery.receivers.smartagent/postgresql.config.params::password="<password>"`
or `SPLUNK_DISCOVERY_RECEIVERS_smartagent_x2f_postgresql_CONFIG_params_x3a__x3a_username="<username>"`
and `SPLUNK_DISCOVERY_RECEIVERS_smartagent_x2f_postgresql_CONFIG_params_x3a__x3a_password="<password>"`
environment variables.

オートディスカバリが、検出されたサービスにアクセスしてメトリクスデータを抽出できない場合、手順と元のログのエラーメッセージが表示されます。この例では、ログイン情報が見つからないか正しくないため、ディスカバリモードが検出された PostgreSQL サーバに対して認証できないことを示します。認証情報はカスタムディスカバリプロパティを使用して提供できます。「ディスカバリプロパティの設定または修正」を参照してください。

注: Collector の Linux インストールスクリプトは、--discoveryオプションをサポートしています。インストールスクリプトでディスカバリモードをオンにすると、結果の設定が metrics パイプラインに直接適用されます。例:
curl -sSL https://dl.signalfx.com/splunk-otel-collector.sh > /tmp/splunk-otel-collector.sh && \
sudo sh /tmp/splunk-otel-collector.sh --realm <realm> – <token> --mode agent --discovery

ディスカバリー・プロパティの設定または修正

ディスカバリモードで特定された問題のほとんどを修正するには、ステータスメッセージで提案されたコンフィギュレーション設定を追加または編集します。次の方法で必要な設定を定義できます。

  • 実行時にディスカバリモードが使用する設定を指定するには、--setオプションを使用します。例:

    --set splunk.discovery.receivers.smartagent/postgresql.config.params::username='${PG_USERNAME_ENVVAR}'
  • 設定の環境変数を設定します。各ディスカバリプロパティには、非単語文字 [^a-zA-Z0-9_]_x<hex pair>_ エンコードされた区切り文字を使用した、同等の環境変数フォームがあります。

    例:

    export SPLUNK_DISCOVERY_RECEIVERS_smartagent_x2f_postgresql_CONFIG_params_x3a__x3a_username='${PG_USERNAME_ENVVAR}'
  • config.d/properties.discovery.yaml ファイルでプロパティを定義します。「プロパティファイルによりプロパティを定義する」を参照してください。

問題が検出されると、ディスカバリモードは、不足しているコンフィギュレーション設定を完了するために使用しなければならないパラメータや環境変数を提案します。

注: デフォルトでは、ディスカバリプロセスの時間は 10 秒です。これは、環境変数 SPLUNK_DISCOVERY_DURATION を設定することで増やすことができます。次に例を示します。export SPLUNK_DISCOVERY_DURATION = 20s

高度なカスタマイズ設定を含む詳細については、「サードパーティアプリケーションのディスカバリ設定をカスタマイズする」を参照してください。

使用例

次の例は、ディスカバリーモードを使用してLinuxにCollectorをインストールし、MySQLデータベースを検索してメトリクスを取得する方法を示しています。

  1. MySQL が稼働しているホストに Collector をインストールします。 --discovery フラグを含めます。

    curl -sSL https://dl.signalfx.com/splunk-otel-collector.sh > /tmp/splunk-otel-collector.sh && \
    sudo sh /tmp/splunk-otel-collector.sh --realm <realm> - <token> --mode agent --discovery
  2. 以下のコマンドで Collector ログを取得し、検出プロセスの出力を確認します:

    journalctl -u splunk-otel-collector -f

    次のログの例では、MySQL データベースが部分的に検出されています。エラーメッセージに問題が示されています。この場合は、不正な認証情報です。

    Partially discovered "mysql" using "docker_observer" endpoint "acb7cf9f5d674b8bb83487e043857d98c42b93f2214f114b2228e86932b2cde2:3306": Make sure your user credentials are correctly specified using the `--set splunk.discovery.receivers.mysql.config.username="<username>"` and `--set splunk.discovery.receivers.mysql.config.password="<password>"` command or the `SPLUNK_DISCOVERY_RECEIVERS_mysql_CONFIG_username="<username>"` and `SPLUNK_DISCOVERY_RECEIVERS_mysql_CONFIG_password="<password>"` environment variables. (evaluated "{\"error\":\"Error 1045 (28000): Access denied for user 'splunk.discovery.default'@'172.17.0.1' (using password: YES)\",\"kind\":\"receiver\",\"message\":\"Failed to fetch InnoDB stats\"}")
  3. 次の内容が含まれるディレクトリです。

    splunk.discovery.receivers.mysql.config.username: "<username>"
    splunk.discovery.receivers.mysql.config.password: "<password>"
  4. 以下のコマンドで Collector を再起動します:

    sudo systemctl restart splunk-otel-collector
  5. Collectorのログをもう一度調べて、MySQLデータベースが正常に検出されたことを確認します:

    journalctl -u splunk-otel-collector -f
  6. 成功すると、ログには以下のような行が含まれます:

    Successfully discovered "mysql" using "docker_observer" endpoint "abcdef1234:3306".

MongoDBの自動ディスカバリー

デフォルトでは、MongoDB の自動ディスカバリールールはサーバーが SSL/TLS を有効にしていると仮定しています。

そうでない場合は、以下のコマンドラインフラグでその旨を示します。

--set splunk.discovery.receivers.mongodb.config.tls::insecure=true

トラブルシューティング

__ ___ ___ _ ______ _____________ _____ ________ ___ ___ ___ ____ __ ___ ____ ____ __ ______ _____________ ______ ___ ___ ___ ____ __ ___ _________ _____

_________ __ ______ _____________ _____ _________

_________ __ ___________ _________ ___ ____ _____ _____

  • ___ _ ________ ___ ___ _______ _______ _________ _______ __ ______ ________

  • ____ ___ ______ ______________ ____ _____ _____ _______ __ ___________ ____ __________ _________ ___ ______ _________ __________ __ _____ ___ ____ _______