メインコンテンツまでスキップ
Sumo Logic Japanese

Slack アプリケーションのログの収集

このページでは、Slack アプリケーションのログ収集を設定する方法を説明し、ログ メッセージとクエリの例を示します。

このページでは、Slack からログを収集して Sumo Logic に取り込み、Slack アプリケーションで事前定義済みのダッシュボードと検索を使用する方法を説明します。

ログ タイプ

Slack ログは JSON 形式です。Slack アプリケーションは次のログ タイプを使用します。

使用できるログ タイプは Slack プランによって決まります。 

ログ タイプ

フリー プラン

スタンダード プラン

 プラス料金プラン

エンタープライズ プラン

ユーザ ログ

公開チャネル ログ

公開メッセージ ログ

アクセス ログ

 

監査ログ

     

収集の概要

Sumo Logic では、Slack から Slack API 経由でログを収集できます。収集するログのタイプも設定できます。ログは、Sumo Logic の HTTP Source に転送されます。デフォルトでは、収集は現在の日付と時刻から開始されますが、この設定も変更できます。詳細については、「高度な設定」セクションを参照してください。Acquia アプリケーションのログの収集を設定するには、次の作業を行います。

  • ステップ 1: ログ収集用の Slack API トークンの作成
  • ステップ 2: Hosted Collector と HTTP Source を追加する
  • ステップ 3: Slack の収集の設定

ステップ 1: ログ収集用の Slack API トークンの作成

このセクションでは、すべてのタイプの Slack プラン用の Slack API トークンを生成する方法を説明します。このセクションは、Slack プランのタイプとログ タイプに基づいて編成されています。以下のステップの説明に従って、Slack プランを確認し、Slack API トークンを生成します。

ユーザ、チャネル、およびアクセス ログ

この作業を行うには、管理者権限が必要です。以下のステップで生成されるトークンをすべての Slack プランで使用すると、説明されているログ タイプを収集できるようになります。

ユーザ、チャネル、およびアクセス ログ用の Slack API トークンを生成するには、次の手順を実行します。

  1. [Apps (アプリケーション)] ページに移動します。
  2. [Create New App (新規アプリケーションの作成)] をクリックします。

Slack_Create_New_App_dialog.png

  1.  [App Name (アプリケーション名)] に名前を入力して、トークンを生成してログを収集する [Development Slack Workspace (開発 Slack ワークスペース)] を選択します。

Slack_App_Name_dialog.png

  1. [Create App (アプリケーションを作成)] をクリックします。
  2. 上の手順で作成したアプリケーションの [Basic Information (基本情報)] セクションで [Permissions (権限)] をクリックします。

Slack_Basic_Information_dialog.png

  1. [Scopes (範囲)] セクションで、ログを収集するために以下の権限を追加して [Save (保存)] をクリックします。ログはこれらの権限に基づいて収集されます。

権限

収集されるログ

Slack プラン

admin

アクセス ログ

すべて

channels:history

公開メッセージ ログ

すべて

channels:read

公開チャネル ログ

すべて

Users:read

users:read.email

ユーザ ログ

すべて

team:read

すべてのログのチーム名。

すべて

Slack_Scopes_dialog.png

  1. [Install App (アプリケーションのインストール)] に移動して [Install App to Workspace (アプリケーションをワークスペースにインストール)] をクリックします。

Slack_Install_App_dialog.png

選択した権限に基づいて、インストールに必要な権限が求められます。

  1. [Allow (許可)] をクリックしてアプリケーションをワークスペースにインストールします。

Slack_Confirm_Permission.png

  1. 生成されたトークンをコピーします。このトークンは、Slack Collector の設定時に必要になります。

Slack_App_Token_dialog.png

  1. 次のコマンドで、生成されたトークンが有効であることを確認します。トークンが有効である場合は、応答として "ok":true が出力されます。<API_TOKEN> 変数は、前のステップでコピーした生成済みのトークンに置き換えます。
curl -X GET -H "Content-Type: application/json" https://slack.com/api/team.info?token=<API_TOKEN>&pretty=1
curl -X GET -H "Content-Type: application/json" https://slack.com/api/users.list?token=<API_TOKEN>&limit=5&pretty=1
curl -X GET -H "Content-Type: application/json" https://slack.com/api/channels.list?token=<API_TOKEN>&limit=2&pretty=

監査ログ

この生成済みのトークンは、監査ログを収集するために Enterprise Slack プランでのみ使用できます。

監査ログ用の Slack API トークンを生成するには、次の手順を実行します。

  1. 「ユーザ、チャネル、およびアクセス ログ」で作成した Sumo Slack アプリケーションの場合は、[OAuth and Permission (OAuth および権限)] に移動します。
  2. [Redirect URLs (リダイレクト URL)] に移動し、リダイレクト URL として http://localhost を追加して、[Save URLs (URL の保存)] をクリックします。

Slack_OAuth&Permissions_dialog.png

  1. [Manage Distribution (配信の管理)] > [Share Your App with Other Workspaces (アプリケーションを他のワークスペースと共有)] に移動します。
  2. 同じページ上にある​[Remove Hard Coded Information (ハード コーディングされた情報を削除)] セクションを開き、[I’ve reviewed and removed any hard-coded information (ハード コーディングされた情報を確認して削除しました)] チェック ボックスをオンにします。

Slack_Remove-Hardcoded-Info.png

  1. [Activate Public Distribution (公開配信の有効化)] をクリックします。
  2. [Shareable URL (共有可能な URL)] をコピーし、その末尾に auditlogs:read を追加します。次の例のようになります。
https://slack.com/oauth/authorize?client_id=12345686.853580033397&scope=admin,channels:history,channels:read,team:read,users:read,users:read.email,auditlogs:read

Slack_Manage-Distribution-dialog.png

  1. ブラウザで新しいタブを開き、変更した URL を貼り付けて Enter を押します。
  2. 右上隅にあるドロップダウン メニューを選択して、目的の組織を選びます。

Slack_Select-Org-menu.png

  1. [Allow (許可)] をクリックします。
  2. エラー メッセージは無視し、次の例に示すように、[URL (URL)] フィールドのコードをコピーします。

Slack_Copy-URL.png

  1. Slack アプリケーションの [Basic (基本)] 情報からクライアント ID とクライアント シークレットを取得します。次の URL の <CODE>、<CLIENT_ID>、および <CLIENT_SECRET> の各変数を置き換えます。
https://slack.com/api/oauth.access?code=<CODE>&client_id=<CLIENT_ID>&client_secret=<CLIENT_SECRET>

 

  1. 新しいブラウザ タブを開き、前のステップの URL を [URL (URL)] フィールドに貼り付けて、Enter を押します。
  2. 応答の access_token フィールドのトークン値をコピーします。
{
  "ok": true,
  "access_token": "xoxp-1236544616-Example-Access-Token5bf71298dad60d941f2a44b371",
  "scope": "admin,identify,channels:history,groups:history,im:history,channels:read,team:read,users:read,users:read.email,auditlogs:read",
  "user_id": "WA7PQK3U5",
  "team_id": "EFSFVS",
  "enterprise_id": "EASFEF",
  "team_name": "Test Slack App"
}
  1. 次のコマンドで、生成されたトークンが有効であることを確認します。トークンが有効である場合は、応答として "ok":true が出力されます。<API_TOKEN> 変数は、前のステップでコピーした生成済みのトークンに置き換えます。
curl -X GET -H "Content-Type: application/json" https://slack.com/api/team.info?token=<ACCESS_TOKEN>&pretty=1
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS_TOKEN>" https://api.slack.com/audit/v1/logs?limit=5&pretty=1

ステップ 2: Hosted Collector と HTTP Source を追加する

このセクションでは、Slack のログを収集するために、Sumo Logic の Hosted Collector と HTTP ログ Source を追加する方法を説明します。

使用する Sumo Logic の Hosted Collector を指定するか、次の手順で新しい Hosted Collector を作成します。

Hosted Collector と HTTP Source を追加するには、次の手順を実行します。

  1. 「Hosted Collector を設定する」の手順を実行して、新しい Sumo Logic の Hosted Collector を作成します。

  2. これらの手順に従って、上記で作成した Hosted Collector で新しい HTTP ログ Source を作成します。

ステップ 3: Slack の収集の設定

このセクションでは、Slack からログを収集して Sumo Logic に送信するための方法をいくつか説明します。ログは、Slack アプリケーションのダッシュボードに表示されます。Amazon Web Services (AWS) で AWS Lambda サービスを使用して Slack 用の Sumo Logic Collector を設定するか、または Linux マシンで cron ジョブを使用してスクリプトを実行できます。環境に最も適した方法を選択してください。

  • サーバレス アプリケーション モデル (SAM) アプリケーションによる AWS Lambda ベースの収集
  • スクリプト ベースの収集

Sumo Logic Slack SAM アプリケーション

この収集方法では、AWS アカウントで必要なリソースを作成する SAM アプリケーションをデプロイします。

Sumo Logic Slack SAM アプリケーションをデプロイするには、以下の手順を実行します。

  1. https://serverlessrepo.aws.amazon.com/applications にアクセスします。

  2. sumologic-slack を探して、「Show apps that create custom IAM roles or resource policies (カスタム IAM ロールまたはリソース ポリシーを作成するアプリケーションを表示)」というテキストの隣にあるチェックボックスがオンであることを確認して、表示されるアプリケーション リンクをクリックします。

Slack_Serverless_App_Repo_dialog.png

  1. Sumo アプリケーションのページが表示されたら [Deploy (デプロイ)] をクリックします。

Slack_Deploy_SAM_app.png

  1. [AWS Lambda] > [Functions (関数)] > [Application Settings (アプリケーション設定)] パネルで、対応するテキスト フィールドに以下のパラメータを入力します。

  • HTTPLogsEndpoint: ステップ 2 から HTTP ログ Source の URL をコピーして貼り付けます。
  • Token: ステップ 1 から認証トークンをコピーして貼り付けます。
  • BackfillDays: イベント収集が開始される前の日数。1 を指定すると、昨日から今日にかけてイベントがフェッチされます。
  • EnableInfrequentChannels: デフォルトは false です。
    • true を選択した場合: 最後のメッセージ時間に基づいて、チャネルが高頻度と低頻度に分割されます。                     
    • false を選択した場合: すべての公開チャネル メッセージが送信されます。
  • InfrequentChannelsThresholdInHours: デフォルトは 72 です。最後のメッセージ時間に基づいて、チャネルを低頻度にするしきい値 (時単位)。たとえば、12 時間を設定した場合、チャネルで会話がない時間が 12 時間になると、そのチャネルは低頻度としてマークされます。
  • InfrequentChannelsMessagesFetchTimeInHours: デフォルトは 12 です。低頻度チャネルでメッセージをフェッチする時間 (時単位)。                                           たとえば、12 時間を設定した場合は、低頻度チャネル メッセージが 12 時間ごとに送信されます。

ApplicationSettingsDialog_updated.png

  1. [Deploy (デプロイ)] をクリックします。

複数 Slack ワークスペースの収集の設定

このセクションでは、すでに 1 つのプロジェクトから Slack データを収集しているという前提で、複数のプロジェクトからの収集を設定する方法を説明します。

複数のプロジェクトのログ収集を設定するには、以下の作業を行います。 

  1. 新しいプロジェクトの設定で SAM アプリケーションをデプロイします。

  2. デプロイが完了したら、AWS Lambda で環境変数 (DBNAME) を追加してデータベース名を変更します。

Slack_DBNAME_dialog.png

Sumo Logic Slack のスクリプト ベースの収集

このセクションでは、Sumo Logic Slack アプリケーションのスクリプト ベースの収集をデプロイする方法を説明します。

前提条件

  • すでに Hosted Collector と HTTP Source を正常に追加してあり、ステップ 1ステップ 2 に従って Slack から設定パラメータ (トークン) をコピーしてあることが必要です。
  • Collector をインストールするユーザ アカウントでログインしている必要があります。そうでない場合は、次のコマンドで正しいアカウントに切り替えてください。
    sudo su <user_name>

Linux マシンでのスクリプトの設定

この作業では、Linux マシンにスクリプトをインストールする方法を示します。

スクリプトをデプロイするには、次の手順を実行します。

  1. まだ pip がインストールされていない場合は、pip のドキュメントの指示に従って pip をダウンロードしてインストールします。 

  2. Python 3.7 または Python 2.7 と互換性のある Linux マシンにログインします。 

  3. 次のいずれかを実行します。

Python 2 の場合は、次のコマンドを実行します。pip install sumologic-slack

Python 3 の場合は、次のコマンドを実行します。pip3 install sumologic-slack 

  1. 次の例に示すように、ホーム ディレクトリで slackcollector.yaml ファイルを作成して、指定されているパラメータを設定します。

Slack:
 TOKEN: <Paste the Token collected from Slack App from step 1.>
 ENABLE_INFREQUENT_CHANNELS: < Default is 'false'.
                               'true' -> Enable dividing channels into frequent and infrequent based on the last message time.
                               'false' -> Send all public channels messages.>
 INFREQUENT_CHANNELS_THRESHOLD_IN_HOURS: < Default is 72.
                                           Threshold in hours to make channels as infrequent based on last message time. 
                                           For eg,12 hours means if the message is not received for 12 hours, channel will be marked as infrequent.>
 INFREQUENT_CHANNELS_MESSAGES_FETCH_TIME_IN_HOURS: < Default is 12.
                                                     Time in hours to fetch messages for InFrequent channels.
                                                     For eg, 12 hours means send infrequent channels messages every 12 hours.>
Collection:
 BACKFILL_DAYS: <Enter the Number of days before the event collection will start.>
SumoLogic:
 HTTP_LOGS_ENDPOINT: <Paste the URL for the HTTP Logs source from step 2.>
  1. Collector を 5 分おきに実行する cron ジョブを作成します (crontab -e オプションを使用します)。次のいずれかを実行します。

Python 2 の場合は、次の行を crontab に追加します。 
*/5 * * * *  /usr/bin/python -m sumoslack.main > /dev/null 2>&1

Python 3 の場合は、次の行を crontab に追加します。 
*/5 * * * *  /usr/bin/python3 -m sumoslack.main > /dev/null 2>&1

複数プロジェクトの収集の設定 

このセクションでは、すでに 1 つのプロジェクトから Slack データを収集しているという前提で、複数のプロジェクトからの収集を設定する方法を説明します。

複数のプロジェクトのログ収集を設定するには、以下の作業を行います。

  1. Linux マシンでスクリプトを設定したら、設定ファイルに移動します。
  2. 次の例に示すように、slackcollector.yaml ファイルで DB_NAME を変更します。
Slack:
 TOKEN: <Paste the Token collected from Slack App from step 1.>
 ENABLE_INFREQUENT_CHANNELS: < Default is 'false'.
                               'true' -> Enable dividing channels into frequent and infrequent based on the last message time.
                               'false' -> Send all public channels messages.>
 INFREQUENT_CHANNELS_THRESHOLD_IN_HOURS: < Default is 72.
                                           Threshold in hours to make channels as infrequent based on last message time. 
                                           For eg, 12 hours means if the message is not received for 12 hours, channel will be marked as infrequent.>
 INFREQUENT_CHANNELS_MESSAGES_FETCH_TIME_IN_HOURS: < Default is 12.
                                                     Time in hours to fetch messages for InFrequent channels.
                                                     For eg, 12 hours means send infrequent channels messages every 12 hours.>
Collection:
 BACKFILL_DAYS: <Enter the Number of days before the event collection will start.>
 DBNAME: <New Database Name.>
SumoLogic:
 HTTP_LOGS_ENDPOINT: <Paste the URL for the HTTP Logs source from step 2.>

高度な設定

このセクションは、AWS Lambda ベースの収集スクリプト ベースの収集の両方に共通です。 

設定ファイルで定義できる (省略可能な) Slack 変数のリストを次の表に示します。

変数 使い方

Slack セクションの LOG_TYPES

使用するトークンのタイプに基づいてログを削除します。

LOG_TYPES:

 - USER_LOGS

 - ACCESS_LOGS

 - CHANNELS_LOGS

 - CHANNELS_MESSAGES_LOGS

 - AUDIT_LOGS

# 次の監査ログを除外できます。Slack からの正確なアクション名を使用します。

ExcludeAuditLogs:

- Exclude_action_name1

- Exclude_action_name2

[Collection (収集)] セクションの BACKFILL_DAYS イベント収集を開始する前の日数。1 を指定すると、昨日から今日にかけてイベントがフェッチされます。
[Logging (ログ)] セクションの LOG_FORMAT Python ログ モジュールがログをファイルに書き込むために使用するログ形式。
[Logging (ログ)] セクションの ENABLE_LOGFILE すべてのログとエラーをログ ファイルに書き込む場合は TRUE に設定します。
[Logging (ログ)] セクションの ENABLE_CONSOLE_LOG コンソールへのログ出力を有効にします。
[Logging (ログ)] セクションの LOG_FILEPATH ENABLE_LOGFILE を TRUE に設定した場合に使用するログ ファイルのパス。
[Collection (収集)] セクションの NUM_WORKERS API コールで生成するスレッド数。
[Collection (収集)] セクションの MAX_RETRY リクエスト失敗時の再試行回数。
[Collection (収集)] セクションの BACKOFF_FACTOR 2 回目以降の再試行において、再試行と再試行の間に適用されるバックオフ係数。backoff_factor が 0.1 の場合、sleep() は再試行と再試行の間で [0.0s, 0.2s, 0.4s, ...] とスリープします。
[Collection (収集)] セクションの TIMEOUT リクエスト ライブラリで使用するリクエスト タイムアウト。
[SumoLogic] セクションの HTTP_LOGS_ENDPOINT Sumo Logic で作成されるログ取り込み用の HTTP Source エンドポイント URL。

トラブルシューティング

このセクションでは、関数を手動で実行して Slack からログ メッセージが送信されていることを確認する方法を説明します。

関数を手動で実行するには、次の手順を実行します。

  1. 次のいずれかのコマンドを入力します。
  • Python 2 の場合は次のコマンドを使用します。python -m sumoslack.main
  • Python 3 の場合は次のコマンドを使用します。python3 -m sumoslack.main
  1. /tmp/sumoapiclient.log に自動生成されているログをチェックして、関数がトリガされているかどうかを確認します。
  2. Slack アプリケーションに範囲を追加しようとしたときに「OAuth Error: team_not_authorized」というエラー メッセージが表示された場合は、アプリケーションから auditlogs:read 範囲を削除してください。

ログ メッセージのサンプル

ログ タイプごとのログ メッセージの例を次の表に示します。

ログ タイプ ログ メッセージのサンプル
ユーザ ログ

{

  "id": "UM27LNGHK",

  "name": "test",

  "deleted": false,

  "real_name": "test",

  "tz": "Asia/Kolkata",

  "tz_label": "India Standard Time",

  "is_admin": false,

  "is_owner": false,

  "is_primary_owner": false,

  "is_restricted": false,

  "is_ultra_restricted": false,

  "is_bot": false,

  "is_app_user": false,

  "updated": 1565005724,

  "has_2fa": false,

  "teamName": "TestSlack",

  "email": "test@test.com",

  "billable": true,

  "logType": "UserLog"

}

公開チャネル ログ

{

  "channel_id": "CKN1D8010",

  "channel_name": "testchannel",

  "members": 2,

  "logType": "ChannelDetail",

  "teamName": "TestSlack"

}

公開メッセージ ログ

{

  "type": "message",

  "text": "Test",

  "files": [

    {

      "name": "Test",

      "fileType": "epub",

      "fileSize": 1258,

      "urlPrivate": "https://files.slack.com/files-pri/TJ...htyhomsdconmps",

      "urlPrivateDownload": "https://files.slack.com/files-pri/TJ...htyhomsdconmps",

      "permalink": "https://testslack-xj11408.slack.com/...htyhomsdconmps"

    }

  ],

  "attachments": [

    {

      "id": 16,

      "text": "Test",

      "author_name": "",

      "author_link": "",

      "pretext": "",

      "fallback": "Messages Sent"

    }

  ],

  "upload": true,

  "user": "e65b0bd8",

  "display_as_bot": false,

  "ts": "1566215592",

  "client_msg_id": "23849274-580c-4644-9478-8328e5716b89",

  "userName": "roy",

  "channelId": "e65b0d0e",

  "channelName": "app-for-slack",

  "teamName": "TestSlack",

  "logType": "ConversationLog"

}

アクセス ログ

{

  "user_id": "e65b0476",

  "username": "dave",

  "date_first": 1566215532,

  "date_last": 1566215532,

  "count": 2,

  "ip": "213.14.129.105",

  "user_agent": "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36",

  "isp": "Inetbroadband",

  "country": "PA",

  "region": "EU",

  "teamName": "TestSlack",

  "logType": "AccessLog"

}

監査ログ

{

  "logType": "UserAuditLog",

  "id": "bdcb13e3-28a3-41f0-9ace-a20952def3a0",

  "date_create": 1566215192,

  "action": "user_created",

  "actor": {

    "type": "user",

    "user": {

      "id": "e65b0f5c",

      "name": "roy",

      "email": "aaron@demo.com"

    }

  },

  "entity": {

    "id": "e65b107e",

    "privacy": "public",

    "name": "BigCo ISP",

    "is_shared": false,

    "is_org_shared": false,

    "filetype": "text/csv",

    "title": "john",

    "is_distributed": false,

    "is_directory_approved": false,

    "scopes": [

      "identify",

      "bot",

      "incoming-webhook",

      "channels:read",

      "groups:read",

      "im:read",

      "users:read",

      "chat:write:bot",

      "users:read.email",

      "groups:write",

      "channels:write",

      "team:read",

      "chat:write:user"

    ]

  },

  "context": {

    "location": {

      "type": "workspace",

      "id": "e65b11aa",

      "name": "Docker",

      "domain": "Docker"

    },

    "ua": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0",

    "ip_address": "120.188.0.246"

  },

  "details": {

    "id": "USLACKUSER",

    "name": "himanshu",

    "email": "kumar@demo.com"

  }

}

クエリの例

このクエリ例は、[Slack - Public Channels (Slack - 公開チャネル)] ダッシュボードの [Channel Summary (チャネル サマリー)] パネルから引用されています。

_sourceCategory=Labs/slack
| join ("logType":"channelDetail"
| json "channel_name", "channel_id", "teamName", "members" as Channel, ChannelId, Workspace, Members
| withtime Members
| most_recent(Members_withtime) as Members by Channel, ChannelId, Workspace) as T1,("logType":"ConversationLog" | json "user", "userName", "type", "subtype", "ts", "text", "channelId", "channelName", "teamName" as ID, User, Type, SubType, Time, Text, ChannelId, Channel, Workspace nodrop
| count_distinct(Time) as Messages by ID, ChannelId, Workspace) as T2 on T1.ChannelId = T2.ChannelId and T1.Workspace=T2.Workspace
| T2_Workspace as Workspace | T2_ID as User| T1_Channel as Channel
| where Workspace matches {{Workspace}} and Channel matches {{Channel}}
| T1_Members as %"Team Members"
| fields Workspace, Channel, User, %"Team Members" ,T2_Messages
| where [subquery:"logType":"UserLog"
| json "id", "name", "deleted", "is_bot", "teamName" as User, Name, Deleted, Bot, Workspace nodrop
| where Bot matches "false" and !(Name matches "slackbot") and Deleted matches "false"
| withtime Name
| most_recent(Name_withtime) as Name by User, Workspace
| compose User, Workspace]
| sum(T2_Messages) as %"Total Messages", count_distinct(User) as %"Members Posted Messages" by Workspace, Channel, %"Team Members"
| fields Workspace, Channel, %"Team Members", %"Total Messages", %"Members Posted Messages"
| sort by %"Total Messages"
| limit 20
  • この記事は役に立ちましたか?