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

GitHub のログの収集

この手順では、GitHub からログを収集する方法について説明します。

GitHub 用 Sumo Logic アプリケーションは、GitHub リポジトリに組織またはリポジトリ レベルで接続し、WebHook 経由で GitHub イベントを取り込みます。これらのイベントは事前設定済みのダッシュボードに表示され、GitHub のブランチ、問題、プル リクエスト、ユーザ アクティビティ、セキュリティ イベントの概要を包括的に把握できます。

イベント タイプ

GitHub 用 Sumo Logic アプリケーションは、WebHook 経由で GitHub イベントを取り込みます。Sumo Logic はすべてのイベントを取り込みますが、ダッシュボードで使用するのは以下のイベントのみです。

  • Fork
  • Issues
  • Membership
  • Public
  • Pull
  • Pull_request
  • Push
  • Repository
  • Team_add

GitHub イベントの詳細については、GitHub ドキュメントを参照してください。

ログ タイプ

GitHub 用 Sumo Logic アプリケーションは、各ホストの GitHub リモート API から統計情報とイベントを収集します。

GitHub イベントの紹介については、「A Beginner's Guide to GitHub Events (GitHub イベントの初心者向けガイド)」を参照してください。

最初に Sumo Logic で Collector と Source を設定してから、Sumo Logic で作成した HTTP Source アドレスを使用して GitHub Webhook を設定します。

Collector の設定

Hosted Collector を設定します。

Source の設定

  1. HTTP Source を追加します。
  2. 以下の Source フィールドを設定します。
    1. Name (名前): (必須) 名前は必須です。
    2. Description (説明): (省略可能)
    3. Source Host (Source ホスト): 別のホスト名を入力しない限り、OS が割り当てたホスト名が使用されます。
    4. Source Category: GitHub のように、この Source から収集された出力をタグ付けするための文字列を入力します。[Source Category] メタデータ フィールドは、Source を整理してラベル付けするための基本的な構成要素です。詳細については、「ベスト プラクティス」を参照)。
  3. [Advanced (詳細)] セクションを設定します。
    1. Enable Timestamp Parsing (タイムスタンプ parse の有効化)[Extract timestamp information from log file entries (ログ ファイル エントリからタイムスタンプ情報を抽出する)] を選択します。
    2. Time Zone (タイム ゾーン): ログ ファイルのタイム ゾーンを使用します。
    3. Timestamp Format (タイムスタンプ形式)。タイムスタンプの形式は自動的に検出されます。
    4. Enable Multiline Processing (複数行の処理の有効化)[Detect messages spanning multiple lines (複数行にわたるメッセージを検出する)][Infer Boundaries - Detect message boundaries automatically (境界を推測する - メッセージ境界を自動的に検出する)] を選択します。
  4. [Save (保存)] をクリックします。
  5. HTTP Source アドレスを保存します。このアドレスは、GitHub Webhook を設定するために必要になります。

GitHub Webhook の設定

GitHub で、Sumo Logic HTTP Source に接続するための Webhook を設定します。Webhook は組織レベルまたはリポジトリ レベルで設定できます。Webhook を設定すると、その組織またはリポジトリで 1 件以上のサブスクライブ済みイベントが起こるたびにトリガされます。

各組織またはリポジトリでは、イベントあたり最大 20 件の Webhook を作成できます。

GitHub Webhook を設定する手順

  1. GitHub アカウントにサインインします。
  2. 自分の組織に移動します。
  3. [Settings (設定)] > [Webhooks] に移動します。
  4. [Add webhook (Webhook の追加)] をクリックします。[Add webhook form (Webhook フォームの追加)] が表示されます。
  5. 次のように Webhook フォームのデータを入力します。
    1. Payload URL (ペイロード URL): Sumo Logic HTTP Source アドレスを入力します。
    2. Content type (コンテンツ タイプ): application/json を選択します。
    3. Secret (シークレット): 空白のままにします。
    4. Which events would you like to trigger this webhook? (この Webhook をトリガするイベント): [Send me everything (すべてを送信)] を選択します。
    5. Active (アクティブ): ボックスをオンにします。
  6. [Add webhook (Webhook の追加)] をクリックします。

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

GitHub はペイロードのすべてのフィールドを送信します (「Event Type (イベント タイプ)」を参照)。

{
  "action": "opened",
  "issue": {
    "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347",
    "number": 1347,
    ...
  },
  "repository" : {
    "id": 1296269,
    "full_name": "octocat/Hello-World",
    "owner": {
      "login": "octocat",
      "id": 1,
      ...
    },
    ...
  },
  "sender": {
    "login": "octocat",
    "id": 1,
    ...
  }
}

クエリのサンプル

経時的なコミット数

"commits" "https://api.github.com/repos"
| json "commits[*].id[*]", "repository.name", "pusher.name" as commit_size, repo_name, user
| where commit_size != "[]"
| replace(commit_size, ",","") as Ccommit_size
| (length(commit_size) - length(Ccommit_size) + 1) as num_commits
| timeslice 1d
| count by _timeslice

追加または削除されたメンバー

| json "action", "scope", "member.login", "member.id", "member.type", "team.name", "team.permission", "organization.login" as action, scope, member_name, member_id, member_type, team_name, team_permission, org_login
| count by member_id, action, team_name, org_login, member_name, team_permission
| order by action, member_id
| fields member_name, action, team_name, org_login, team_permission

オープンの問題の合計数

| json "action", "issue.id", "issue.number", "issue.title" , "issue.state", "issue.created_at", "issue.updated_at", "issue.closed_at", "issue.body", "issue.user.login", "issue.url", "repository.name", "repository.open_issues_count" as axn, issue_ID, issue_num, issue_title, state, createdAt, updatedAt, closedAt, body, user, url, repo_name, repoOpenIssueCnt
| withtime repoOpenIssueCnt
| most_recent (repoopenissuecnt_withtime) as number_issues by repo_name
| number (number_issues)
  • この記事は役に立ちましたか?