Splunk On-CallのSplunkアドオンインテグレーション 🔗
Splunk Add-on for On-Call (VictorOps)は、Splunk On-CallパブリックAPI を使用してSplunk On-CallデータをSplunkに取り込むダウンロード可能なアドオン(アプリに似ています) です。このアドオンには、Splunk On-Callデータを素早く可視化するのに役立つ、あらかじめ構築されたダッシュボードが含まれています。
このアドオンはヘビーフォワーダーにインストールされ、インストールされている他のアドオンとうまく連携します。アドオンは、ユーザー、チーム、オンコール、およびインシデントの入力データソースを作成します。ポーリング間隔はデータソースごとに定義でき、データソースは必要なデータに応じて選択または選択解除できます。
各タイプのデータについて、スクリプトはAPI応答が重複データを含むかどうかをチェックし、もしそうであれば、そのデータはインデックス化されません。たとえば、すべてのユーザーが同じ間隔でポーリングされますが、ユーザー Aのデータが同じに見える場合はインデックスが作成されません。これは、Splunk On-Callデータが*非常に*少ない量であることを保証するために重要です。
これらのレポートは、複数のSplunk On-Callインスタンスをリアルタイムで可視化し、非常にきめ細かくカスタマイズ可能なレポートを提供します。
対応Splunkバージョン:
Splunk Enterprise, Splunk Cloud
プラットフォームバージョン:9.0*、8.2*、8.1*、8.0*、7.3
Pythonバージョン2または3対応
* 現在、Splunkの特定のバージョンでカレンダーの表示に影響する未解決の問題があります。
一般要件:
事前にアクティブなSplunk On-Callインスタンスが必要です。**`ここをクリック<https://victorops.com/>`__ **14日間の無料トライアルを開始します。
On-Prem
お客様は、Splunk On-Callとのhttps通信用に**ポート443**を開く必要があります。
Proxyは、Splunkのベース`こちら<https://splunkbase.splunk.com/app/4886/>`__または`サポートにお問い合わせください<https://victorops.com/contact/>`__からサポートされています(1.0.5バージョン以上で利用可能)。
重要な注意事項:。
アドオンには、ダッシュボードとデータ入力の両方があるため、両方を
すべての検索ヘッドとヘビーフォワーダーで設定する必要があります。
1つの入力につき1つのインデックスを使用することを推奨しますが、複数の入力を1つのインデックスに書き込むことも可能です。
アドオンにはマクロが必要です。マクロを再チェックし、正しいインデックスを指していることを常に確認することをお勧めします。
アドオンはプロキシ設定をサポートしています。
セットアップ手順 🔗
Splunkのベース` <https://splunkbase.splunk.com/app/4886/>`__からアドオンをダウンロードしたら、インストールする必要があります。Apps > Manage Apps >> Install App From Fileに移動し、以前にダウンロードした.tar.gzファイルをインポートします。
On-Call 用のSplunkアドオンがSplunkのアプリとして表示されているはずなので、アプリに移動します。「入力」で「新規入力の作成」を選択し、Splunk On-Callから取り込みたいデータの種類を選択します。すべてのデータタイプについて、入力設定オプションは以下のようになります:
名前 - これはデータ入力の一意な名前です。ベストプラクティスとして、入力を正確に表す名前を選択します。例えば、vo_users_<org_name>のようにします。
間隔 - Splunk On-Call APIをポーリングする間隔を秒単位で指定します。この数値を選択する際には、Splunkに変更が反映されるまでの時間スケール、Splunk On-Callでの更新速度、ポーリングスクリプトを実行する際のリソース消費量に留意してください。
インシデントとオンコールのポーリング間隔は約300秒にすることを推奨します。一方、チームとユーザーのポーリング間隔は3600秒近くにすることを推奨しますが、ニーズとユースケースに応じてこれらの値を調整してください。
インデックス -データが利用可能な任意のSplunkインデックスを選択します。入力ごとに1つのインデックスを推奨します。ダッシュボードにデータを入力するには、ダッシュボードの検索マクロを更新して、決定したインデックス名を使用する必要があります。
組織ID - このデータがSplunk On-Callのどの組織から取得されたものかを示します。Splunk On-Callで複数の組織からデータを収集する場合は、さらに重要です。
API ID - この値はSplunk On-CallのIntegrations >> APIで確認できます(管理者またはアラート管理者が必要です)。
API Key - この値はSplunk On-CallのINtegrations >> APIで確認できます(管理者またはアラート管理者が必要です)。
入力の詳細 🔗
収集される入力には、ユーザー、オンコール、チーム(ルーティングキーを含む)、インシデントの4種類があります。各入力は個別に選択でき、他の入力とは独立しています。言い換えれば、ユーザーは組織ごとにインデックスを作成する内容を決定することができます。以下は、サンプルJSONフォーマットの入力とそれぞれの属性です。
ユーザー (type=user)
情報
名前(姓、名、ユーザー名)
作成日
作成日
パスワード更新日
検証済み
連絡方法 - すべての連絡方法の名前、確認状況(電話のみ)、および値。
ページングポリシー
組織
オンコール(type=oncall、イベントはチームごとに分割されます)
組織
チーム名、スラグ
エスカレーションポリシー
インデックス作成時のオンコールユーザー
チーム (type=team)
情報
メンバー数、検証済みメンバー数
チーム名、スラグ
メンバー
ユーザー名、姓、名
検証済み
組織
ポリシー
名前、スラグ
ルーティングキー (type=routingkey)
デフォルトのルーティングキーのステータス(true/false)
組織
Name
ターゲットエスカレーションポリシー
エスカレーションポリシー名、スラグ
チーム名、スラグ
インシデント (source=victorops_incidents)
ページングされたユーザー、チーム
状態変化(ack、resolve)
すべてのメタデータ
インデックスのタイムスタンプがstartTimeフィールドに設定されます
アラートカウント
トラブルシューティング 🔗
問題が発生した場合に、通常は順番どおりに、確認すべき事項
API認証情報が正しいことを確認します。これは「Splunk APIキー」ではなく、Integrations >> API にあるパブリックAPIキーとIDです。
外部のWebアクセスが許可されている環境であれば、ホストからSplunk On-Call APIにアクセスできることを確認してください。ping api.victorops.comを実行して接続を確認してください。
$SPLUNK_HOME/var/log/splunk/ta_splunk_add_on_for_victorops_victorops_<INSERT_INPUT_TYPE_HERE>.logにあるログを検査することで、さらに調査することができます。
過去7日間に60件以上のインシデントが発生した組織でインシデントポーリングを行う場合、Splunk On-Call APIのレート制限により、インシデントポーリングの実行に時間がかかることがあります。入力が正しく設定されているにもかかわらずインシデントデータが表示されない場合、上記のインシデントログのログパスを確認してください (例: tail -f ta_splunk_add_on_for_victorops_victorops_incidents.log) 最後のログエントリが 「Waiting 59.9858229999996 seconds」のようになっている場合、スクリプトはデータの収集とインデックス作成を終了するためにレート制限を待っています。この問題が解決しない場合は、ポーリング間隔の短縮を検討してください。
ダッシュボードの項目が表示されない場合は、設定>>詳細検索>>検索マクロでダッシュボードのマクロをチェックし、入力用に作成したインデックス名がマクロで使用されていることを確認します。
[ht_toggle title=“Webhook Set Up” id=“” class=“” style=“” ]
重要な注意事項:。
必要に応じてWebhook設定も利用できますが、Webhook設定の代わりにネイティブアドオンを強くお勧めします。
Webhooks 🔗
データのインジェスト 🔗
Splunk On-Callは`HTTP Endpoint Collector<https://docs.splunk.com/Documentation/Splunk/9.0.5/Data/UsetheHTTPEventCollector>`__ (HEC)を使用してSplunkにデータを送信します。デプロイによっては、ヘビーフォワーダーも必要になる可能性があります。Splunk On-CallからSplunkへの通信を確実に行うには、Splunk On-CallのIPアドレス範囲をホワイトリストに登録する必要があります。
ヒント: SplunkでHECをセットアップする際、送信するデータのタイプに合わせて新しいソースタイプを作成してください。これにより、チャット、インシデントアクションログ、異なるチームのインシデントなど、複数の異なるタイプのOnCallデータを送信し、追跡することができます。
Webhookの作成 🔗
発信Webhook を4つ、イベントタイプごとに作成できます。各構成については以下を参照してください。URLは各Webhookで同じになりますが、Splunkのデプロイによって異なることに注意してください。
Splunkバージョン | URL |
オンプレミスインスタンス |
|
セルフサービスSplunkクラウドインスタンス |
|
その他のすべてのSplunk Cloudインスタンス |
|
注意:まれにですが、Splunkのインスタンスによっては、イベントの取り込みに8088ではなく443番ポートを使用するものがあります。
このヘッダーは、すべてのwebhookとSplunkデプロイで同じものになります。必ずHECの適切な値に置き換えてください。
キー | 値 |
認証 | Splunk <token> |
Content Typeフィールドはapplication/jsonに設定してください。
各Webhookの本文はイベントタイプによって異なります。<org_slug>のすべてのインスタンスで、組織スラグ(victoropsのURLにある組織ID、例えば https://portal.victorops.com/dash/<org_slug>/outgoing-webhooks
)を必ず置き換えてください。
イベントタイプ: Any Incidents
Body:
{ “sourcetype”: “_json”, “event”: { “slug”: “<org_slug>”, “link”: “https://portal.victorops.com/client/<org_slug>/popoutIncident?incidentName=\({{STATE.INCIDENT\_NAME}}", "type": "incident", "alertService": "\) {{ALERT.service}}”, “hostName”: “ \({{ALERT.host\_name}}", "service": "\) {{ALERT.service}}”, “ENTITY_TYPE”: “ \({{INCIDENT.ENTITY\_TYPE}}", "SERVICESTATE": "\) {{ALERT.SERVICESTATE}}”, “VO_ALERT_RCV_TIME”: “ \({{ALERT.VO\_ALERT\_RCV\_TIME}}", "alert\_url": "\) {{ALERT.alert_url}}”, “entity_display_name”: “ \({{ALERT.entity\_display\_name}}", "entity\_state": "\) {{ALERT.entity_state}}”, “message_type”: “ \({{ALERT.message\_type}}", "monitor\_name": "\) {{ALERT.monitor_name}}”, “monitoring_tool”: “ \({{ALERT.monitoring\_tool}}", "routing\_key": "\) {{ALERT.routing_key}}”, “alert_timestamp”: “ \({{ALERT.timestamp}}", "ACK\_MSG": "\) {{STATE.ACK_MSG}}”, “ACK_USER”: “ \({{STATE.ACK\_USER}}", "ACK\_TIMESTAMP": "\) {{STATE.ACK_TIMESTAMP}}”, “ALERT_COUNT”: “ \({{STATE.ALERT\_COUNT}}", "CURRENT\_ALERT\_PHASE": "\) {{STATE.CURRENT_ALERT_PHASE}}”, “CURRENT_STATE”: “ \({{STATE.CURRENT\_STATE}}", "ENTITY\_ID": "\) {{STATE.ENTITY_ID}}”, “IncidentNum”: “ \({{STATE.INCIDENT\_NAME}}", "INCIDENT\_TIMESTAMP": "\) {{STATE.INCIDENT_TIMESTAMP}}”, “LAST_TIMESTAMP”: “ \({{STATE.LAST\_TIMESTAMP}}", "MONITOR\_TYPE": "\) {{STATE.MONITOR_TYPE}}”, “stateService”: “ \({{STATE.SERVICE}}", "alert\_uuid": "\) {{ALERT.VO_UUID}}” } }
イベントタイプ: Any-Paging
Body:
{ “sourcetype”: “_json”, “event”:{ “slug”:“<org_slug>”, “type”:“paging”, “user”: “ \({{PAGE.USER\_ID}}", "started":"\) {{PAGE.STARTED}}”, “page_id”: “ \({{PAGE.ID}}", "attempt\_num": "\) {{PAGE.ATTEMPT_NUMBER}}”, “method_type”: “ \({{PAGE.METHODS.0.TYPE}}", "method\_label": "\) {{PAGE.METHODS.0.LABEL}}”, “cancellation”: “${{PAGE.CANCELLATION}}” } }
イベントタイプ: Any-On-Call
Body:
{ “sourcetype”: “_json”, “event”:{ “slug”:“<org_slug>”, “type”:“oncall”, “user”:“ \({{ONCALL.USER\_ID}}", "state":"\) {{ONCALL.STATE}}”, “team”:“ \({{ONCALL.TEAM\_NAME}}", "group":"\) {{ONCALL.GROUP_ID}}”, } }
Event-type: All-Chats
Body:
{ “sourcetype”: “_json”, “event”:{ “slug”:“<org_slug>”, “type”:“chat”, “user”: “ \({{CHAT.USER\_ID}}", "text": "\) {{CHAT.TEXT}}”, “is_robot”: “${{CHAT.IS_ROBOT}}” } }
[/ht_toggle]