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

Jenkins のログとメトリクスの収集

このページでは、Jenkins 用 Sumo アプリケーションのログとメトリクス収集のセットアップ手順を説明します。

このページでは、Jenkins 用 Sumo Logic アプリケーションのログとメトリクス収集の設定手順を説明します。

収集の概要

Jenkins アプリケーションのログとメトリクスの収集を設定するには、次の作業を行います。

  1. Collector の設定
  2. HTTP ログとメトリクス Source の設定
  3. Jenkins プラグインのインストール
  4. Jenkins プラグインの設定
  5. 省略可能 - 高度な設定

ステップ 1: Collector の設定

新しい Sumo Logic の Hosted Collector を作成するには、Sumo Logic ドキュメントの「Hosted Collector を設定する」のセクションの手順を実行します。

ステップ 2: HTTP ログとメトリクス Source の設定

新しい HTTP ログとメトリクスの Source を作成するには、次の手順を実行します。

  1. 上記で作成した Hosted Collector で新しい HTTP ログとメトリクスの Source を作成するには、これらの手順に従ってください。
  2. [HTTP Source URL][Source Category] の値は、後で設定プロセスで必要になりますので、書き留めておいてください。

ステップ 3: Jenkins プラグインのインストール

このセクションでは、Jenkins プラグインをインストールする方法を順を追って説明します。

Jenkins プラグインの更新

このセクションでは、システムにインストールされている Jenkins プラグインのバージョンを更新する方法を説明します。

Jenkins プラグインを更新するには、次の手順を実行します。

  1. Jenkins コンソールで [Manage Jenkins (Jenkins の管理)] > [Manage Plugins (プラグインの管理)] に移動します。

  2. [Updates (更新)] タブ > [Check now (今すぐ確認)] をクリックします。

Jenkins_Update-1.png

  1. [Sumologic Publisher (Sumologic パブリッシャ)] を選択します。

  2. [Download now and install after restart (ダウンロードして再起動後にインストール)] をクリックします。通常、プラグインを表示するには、Jenkins を再起動する必要があります。

Jenkins_Update-2.png

Sumologic パブリッシャを初めて使用したインストール

このセクションでは、Sumologic パブリッシャを初めて使用して Jenkins プラグインをインストールする方法を説明します。

初回のインストールを行うには、次の手順を実行します。

  1. Jenkins コンソールで [Manage Jenkins (Jenkins の管理)] > [Manage Plugins (プラグインの管理)] に移動します。

Jenkins_1st-time-install.png

  1. [Available (利用可能)] タブをクリックします。

  2. 「Sumologic Publisher (Sumologic パブリッシャ)」を見つけます。

  3. [Sumologic Publisher (Sumologic パブリッシャ)] をクリックします。

  4. [Download now and install after restart (ダウンロードして再起動後にインストール)] をクリックします。通常、プラグインを表示するには、Jenkins を再起動する必要があります。

Jenkins_1st-time-install-1.png

Jenkins プラグインの手動インストール

このセクションでは、Jenkins プラグインを手動でインストールする方法を説明します。

Jenkins プラグインをインストールするには、次の手順を実行します。

  1. このリンクから Jenkins プラグイン HPI ファイルをダウンロードします。

  2. Jenkins コンソールで [Manage Jenkins (Jenkins の管理)] > [Manage Plugins (プラグインの管理)] に移動します。 

  3. [Advanced (詳細)] > [Upload Plugin (プラグインのアップロード)] に移動して、[Choose File (ファイルの選択)] をクリックします。 

Jenkins_Upload_Plugin.png

  1. マシンにダウンロードした Sumologic-publisher.hpi ファイルを選択して、[Upload (アップロード)] をクリックします。

Jenkins_Upload_button.png

プラグインがインストールされると、次のようなページが表示されます。

Jenkins_Plugin_Success.png

  1. [Restart Jenkins when installation is complete and no jobs are running (インストールの完了後、ジョブが実行されていないときに Jenkins を再起動)] を選択します。通常、プラグインを表示するには、Jenkins を再起動する必要があります。

ステップ 4: Jenkins プラグインの設定

この作業では、Sumo Logic 用 Jenkins プラグインの設定を順を追って説明します。

Jenkins プラグインを設定するには、次の手順を実行します。

  1. [Jenkins] > [Manage Jenkins (Jenkins の管理)] に移動して、[Configure System (システムの設定)] を選択します。

Jenkins_Plugin_Configure-System.png

  1. Sumo Logic Jenkins プラグインを探します。
  2. [Sumo Logic Jenkins Plugin (Sumo Logic Jenkins プラグイン)] ダイアログで以下を指定します。
  • SumoLogic Portal Name (Sumo Logic ポータル名) - Hosted Collector のドメイン名です。例: service.sumologic.com または service.us2.sumologic.com
  • Metric Data Prefix (メトリクス データ接頭辞): プラグインがインストールされている Jenkins マスタの名前を入力します。
  • HTTP Source URL: ステップ 2 で書き留めた HTTP Source の URL。HTTP Source URL は次のようになります。https://sumologic_url/receiver/v1/http/SECRET_STRING
  • Source Category: Source 対して定義されている Source Category です。
  • Keep Old Configuration for Jobs (ジョブの古い設定を残す): このオプションを有効にすると、ジョブの古い設定が送信されます。

Jenkins_Plugin_Configure-Sumo-Logic.png 

  1. Sumo Logic に送信するデータのタイプを指定します。
  • Metric Data (メトリクス データ) - メトリクス情報を送信します。
  • Audit Logs (監査ログ) - ログイン、ログアウト、ログイン失敗、ジョブや Jenkins サーバの設定変更などの監査情報を送信します。
  • Periodic Logs (周期ログ) - ノード情報、マスタ情報、シャットダウン イベント、Jenkins システム ログなどの周期的な情報を送信します。
  • SCM logs (SCM ログ) - ビルドに関連した Source コントロール管理システムのログを送信します。
  1. 以下を指定します。
  • Job Status Information (ジョブステータス情報): 選択すると、すべてのジョブのステータスが送信されます。
  • Console Logs Information (コンソール ログ情報): 選択すると、すべてのジョブのコンソール ログが送信されます。
  1. [Apply (適用)] をクリックして、[Save (保存)] をクリックします。

ステップ 5: 省略可能 - 高度な設定

このセクションでは、Jenkins の設定をコードとして使用するプロジェクト用に Sumo Logic Jenkins プラグインの設定方法を説明します。詳細については、「コードとしての設定」を参照してください。

Jenkins の設定をコードとして使用するプロジェクト用に Sumo Logic Jenkins プラグインを設定するには、次の手順を実行します。

  1. プラグインは、このドキュメントに記載されているように、Jenkins が提供するコードとしての設定を使用して設定できます。
  2. 特定のジョブの場合は、次の手順を実行します。
    1. フリースタイルおよび Maven プロジェクトの場合は、[Job Configuration (ジョブの設定)] に移動し、[Post Build Actions (ポスト ビルド アクション)] で [Sumo Logic Build Logger (Sumo Logic ビルド ロガー)] を選択します。

Jenkins_Plugin_Advanced-config-1.png

  1. パイプライン プロジェクトの場合は、次の手順を実行します。 
  1. パイプラインの設定で、通常のスクリプトに対して以下を最上位レベルにします。
SumoPipelineLogCollection {
// your script

Jenkins_Plugin_Pipeline1.png

  1. そしてパイプライン設定で、宣言型パイプライン スクリプトのオプションを更新します。
options {
SumoPipelineLogCollection()
}

Jenkins_Plugin_Pipeline2nd.png

  1. [Apply (適用)] をクリックして、[Save (保存)] をクリックします。

FER (Field Extraction Rules) のログ

Jenkins アプリケーションで使用するログ形式の FER (Field Extraction Rules) を次の表に示します。

監査ログ

監査イベント タイプ

FER (Field Extraction Rules)

User_Login 

User_Logout

User_Login_Failure

Audit_Event (User_Login OR User_Logout OR User_Login_Failure)

| json "userName", "auditEventType", "userId", "message", "eventTime", "logType" as User_Name, Audit_Event, User_Id, Message, Event_Time, Log_Type nodrop

Job_Started

Audit_Event (Job_Started)

| json "userName", "auditEventType", "userId", "message", "eventTime", "logType" as User_Name, Audit_Event, User_Id, Message, Event_Time, Log_Type nodrop

| parse field=Message "User * started the job * with build number as *." as User, Job_Name, Build_Number

Job_Aborted

Audit_Event (Job_Aborted)

| json "userName", "auditEventType", "userId", "message", "eventTime", "logType" as User_Name, Audit_Event, User_Id, Message, Event_Time, Log_Type nodrop

| parse field=Message "User * aborted the job * with build number as *." as User, Job_Name, Build_Number

Job_Finished

Audit_Event (Job_Finished)

| json "userName", "auditEventType", "userId", "message", "eventTime", "logType" as User_Name, Audit_Event, User_Id, Message, Event_Time, Log_Type nodrop

| parse field=Message "Job * with build number as * finished with status as *" as Job_Name, Build_Number, Status

作成

Deleted

Updated

Audit_Event (Created OR Deleted OR Updated)

| json "userName", "auditEventType", "userId", "message", "eventTime", "logType" as User_Name, Audit_Event, User_Id, Message, Event_Time, Log_Type nodrop

| parse field=Message "* * the item *" as User, Event, Item_Name

Copied

Audit_Event (Copied)

| json "userName", "auditEventType", "userId", "message", "eventTime", "logType" as User_Name, Audit_Event, User_Id, Message, Event_Time, Log_Type nodrop

| parse field=Message "* copied the item * from *" as User, New_Item_Name, Copied_From

Location_Changed

Audit_Event (Location_Changed)

| json "userName", "auditEventType", "userId", "message", "eventTime", "logType" as User_Name, Audit_Event, User_Id, Message, Event_Time, Log_Type nodrop

| parse field=Message "* changed the location of the item * to *" as User, Old_Location, New_Location

Config_Change

Audit_Event (Config_Change)

| json "userName", "auditEventType", "userId", "message", "eventTime", "logType", "fileDetails.Old_File_Data", "fileDetails.Current_File_Data" as User_Name, Audit_Event, User_Id, Message, Event_Time, Log_Type, Old_File_Data, Current_File_Data nodrop

| parse field=Message "file *" as File_Name

| base64Decode(Current_File_Data) as Current_File_Data

| base64Decode(Old_File_Data) as Old_File_Data

周期ログ

周期ログ イベント

FER (Field Extraction Rules)

Shutdown

Slave_Event Shutdown

| json "logType", "eventTime", "eventSource" as Log_Type, Event_Time, Event_Source

Jenkins_Log

Jenkins_Log

| json "threadId", "logType", "logLevel", "logMessage", "logSource", "eventTime", "logStackTrace" as Thread_ID, Log_Type, Log_Level, Log_Message, Log_Source, Event_Time, Log_Stack_Trace nodrop

Computer_Online

Computer_Offline

Computer_Temp_Online

Computer_Temp_Offline

Launch_Failure

("Computer_Online" OR "Computer_Offline" OR "Computer_Temp_Online" OR "Computer_Temp_Offline" OR "Launch_Failure")

| json "nodeName", "eventSource", "eventTime", "nodeLabel", "numberOfExecutors", "nodeURL" as Node_Name, Event_Type, Event_Time, Node_Label, Executors, Node_URL nodrop

Periodic_Update

Periodic_Update "nodeStatus":"updated"

| json "nodeName", "monitorData.ArchitectureMonitor", "monitorData.ClockMonitor" ,"monitorData.ResponseTimeMonitor", "monitorData.DiskSpaceMonitor", "monitorData.TemporarySpaceMonitor", "monitorData.SwapSpaceMonitor", "isIdle", "isOnline", "nodeURL", "nodeLabel", "eventTime"  as Node_Name, Architecture, Clock, Reponse_Time, Disk_Space, Temporary_Space, SwapMemory, Idle, Online, URL, Node_Label, Event_Time nodrop

| parse field=SwapMemory "Memory:*  Swap:*" as Physical_Memory, Swap_Memory

Node_Removed

Periodic_Update "nodeStatus":"removed"

| json "eventTime", "nodeName", "numberOfExecutors" as Event_Time, Node_Name, ExecutorsCount nodrop

キュー内のジョブ

Queue_Event

| json "queueId", "queueTime", "isBlocked", "reasonForBlock", "isConcurrentBuild", "jobName", "jobURL" as Queue_Id, Queue_Time, Blocked, Block_Reason, Concurrent_Build, Job_Name, Job_URL nodrop

進行中のジョブ

In_Progress

| json "name", "result", "number", "jobBuildURL", "label", "nodeName", "jobStartTime", "jobRunDuration" as Job_Name, Result, Job_Number, Job_URL, Job_Label, Node_Name, Job_Start_Time, Job_Run_Duration nodrop

SCM ログ

SCM ログ タイプ

FER (Field Extraction Rules)

SCM ステータス

Scm_Status

| json "jobName", "buildNumber", "scmURLs", "branches", "scmType", "revision", "changeLog" as Job_Name, Build_Number, SCM_URLs, Branches, SCM_Type, Revision, Change_Log nodrop

Job ステータス ログ

Job ステータス タイプ

FER (Field Extraction Rules)

ジョブ ステータス

Job_Status

| json "name", "hudsonVersion", "result", "description", "number", "user", "jobStartTime", "jobType", "jobRunDuration", "jobBuildURL", "upstreamJobURL", "triggerCauses", "label","nodeName", "testResult"nodrop

テスト結果

Test_Result

| json "logType", "number", "name", "testResult" nodrop

| parse regex field=testResult "(?<TestResult>\{[^\}]+\})" multi

| json field=TestResult "className", "testName", "status", "duration", "errorDetails", "errorStackTrace" nodrop

パイプライン ステージ

Pipeline_Stages

| json "logType", "number", "name", "stages" nodrop

| parse regex field = stages "(?<Stage>\{[^\}]+(?:\}\}|\}))" multi

| json field=Stage "id", "name", "startTime", "duration", "status", "steps", "error" nodrop

ジョブ コンソール ログ

ジョブ名、ビルド番号、ステージ名は、# で区切られて Source の [Name (名前)] に入力されます (例: MyTest#1#Initialize)。

ジョブ コンソール ログ タイプ

FER (Field Extraction Rules)

コンソール ログ

parse "[*] *" as Log_Time, Log_Message

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

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

ログ タイプ

認証

{

  "userName": "Sourabh Jain",

  "auditEventType": "User_Login",

  "userId": "sourabh",

  "message": "sourabh Logged in.",

  "logType": "Audit_Event",

  "eventTime": "2019-06-06 05:55:38,609 +00:00"

}

設定の変更

{

  "userName": "demoexample@sumologic.com",

  "auditEventType": "Config_Change",

  "userId": "demoexample@sumologic.com",

  "message": "demoexample@sumologic.com changed configuration for the file jobs/demoexample-gradle-dep-check/config.xml.",

  "fileDetails": {

    "Old_File_Data": "PD94bWwgdmVyc2lvbj0nMS4xJyBlbmNvZGluZz0nVVRGLTgnPz4KPGZsb3ctZGVmaW5pdGlvbiBwbHVnaW49IndvcmtmbG93LWpvYkAyLjMyIj4KICA8YWN0aW9ucz4KICAgIDxvcmcuamVua2luc2NpLnBsdWdpbnMucGlwZWxpbmUubW9kZWxkZWZpbml0aW9uLmFjdGlvbnMuRGVjbGFyYXRpdmVKb2DwvYXV0aFRva2VuPgogIDxkaXNhYmxlZD5mYWxzZTwvZGlzYWJsZWQ+demoexamplefile==",

    "Current_File_Data": "PD94bWwgdmVyc2lvbj0nMS4xJyBlbmNvZGluZz0nVVRGLTgnPz4KPGZsb3ctZGVmaW5pdGlvbiBwbHVnaW49IndvcmtmbG93LWpvYkAyLjMyIj4KICA8YWN0aW9ucz4KICAgIDxvcmcuamVua2luc2NpLnBsdWdpbnMucGlwZWxpbmUubW9kZWxkZWZpbml0aW9uLmFjdGlvbnMuRGVjbGFyYXRpdnZ2Vycy8+CiAgPGF1dGhUb2tlbj5zd29yZGZpc2g8L2F1dGhUb2tlbj4KICA8ZGlzYWJsZWQ+ZmFsc2U8L2Rpc2FibGVkdemoexamplefile="

  },

  "logType": "Audit_Event",

  "eventTime": "2019-06-05 15:17:28,237 +00:00"

}

Shutdown

{

  "logType": "Slave_Event",

  "eventTime": "2019-06-05 11:00:12,256 +00:00",

  "eventSource": "Shutdown"

}

Jenkins ログ

{

  "threadId": 33675,

  "logType": "Jenkins_Log",

  "logLevel": "INFO",

  "logMessage": "Finished Sumo Logic Periodic Data Publisher. 102 ms",

  "logSource": "com.sumologic.jenkins.jenkinssumologicplugin.sender.SumoPeriodicPublisher",

  "eventTime": "2019-06-06 07:08:06,908 +00:00"

}

定期更新

{

  "numberOfSlaves": 0,

  "numberOfExecutors": 4,

  "numberOfFreeExecutors": 2,

  "nodeName": "build-jenkins-executor (i-07e3500c4cda1f30b)",

  "nodeLabel": "gradle docker",

  "nodeStatus": "updated",

  "isIdle": false,

  "isOnline": true,

  "isRemoved": false,

  "isConnecting": false,

  "nodeURL": "https://localhost:8080/computer/buil...00c4cda1f30b)/",

  "eventSource": "Periodic_Update",

  "monitorData": {

    "SwapSpaceMonitor": "Memory:48519/63624MB  Swap:0/0MB",

    "ClockMonitor": "In sync",

    "DiskSpaceMonitor": "85.71 GB",

    "ResponseTimeMonitor": "13ms",

    "ArchitectureMonitor": "Linux (amd64)",

    "TemporarySpaceMonitor": "85.71 GB"

  },

  "logType": "Slave_Event",

  "eventTime": "2019-06-06 07:05:06,702 +00:00"

}

キュー内

{

  "numItemsInQueue": 0,

  "numBlockedItemsInQueue": 0,

  "maxWaitingTime": 0,

  "averageWaitingTime": 0,

  "queueId": 3060904,

  "queueTime": 56.093,

  "isBlocked": true,

  "reasonForBlock": "All nodes of label ‘docker’ are offline",

  "isConcurrentBuild": false,

  "jobName": "part of Module ITs: vault #142",

  "jobURL": "https://localhost:8080/job/module-it-vault/142/",

  "logType": "Queue_Event",

  "eventTime": "2019-06-06 06:50:06,668 +00:00"

}

進行中

{

  "name": "TestComplexPipeline",

  "result": "In_Progress",

  "number": 11,

  "start_time": 0,

  "duration": 0,

  "jobStartTime": "2019-06-04 03:39:57,790 +00:00",

  "jobRunDuration": 13.175,

  "jobBuildURL": "http://localhost:8080/job/TestComplexPipeline/11/",

  "label": "Master",

  "nodeName": "master"

}

SCM ログ

{

  "buildNumber": 3,

  "jobName": "master",

  "scmType": "hudson.plugins.git.GitSCM",

  "scmURLs": "git https://github.com/SumoSourabh/build...ne-project.git",

  "revision": "7bb6c1d7b1e3d7d65a39bade4f2ad68196322b2c",

  "branches": "master ",

  "changeLog": [

    "1559619601000 commit:aa058c84927345885838c17bb7db448910885c6b author:Sourabh Jain message:commit",

    "1559621063000 commit:7bb6c1d7b1e3d7d65a39bade4f2ad68196322b2c author:Sourabh Jain message:commit"

  ],

  "logType": "Scm_Status",

  "eventTime": "2019-06-04 04:05:15,723 +00:00"

}

Job ステータス ログ

{

  "name": "MyTest",

  "hudsonVersion": "2.174",

  "result": "UNSTABLE",

  "description": "This is a testPlease . alsncns",

  "number": 35,

  "start_time": 1560239332099,

  "duration": 17401,

  "logType": "Job_Status",

  "user": "sourabh",

  "jobStartTime": "2019-06-11 07:48:52,096 +00:00",

  "jobType": "Maven project",

  "jobRunDuration": 17.401,

  "jobBuildURL": "http://ec2-13-234-181-219.ap-south-1...job/MyTest/35/",

  "upstreamJobURL": "",

  "triggerCauses": "Started by user Sourabh Jain",

  "label": "Master",

  "nodeName": "master",

  "jobMetaData": {

    "NODES": "1,2,3",

    "ENV": "qa",

    "APPS": "app01,app02"

  },

  "testResult": {

    "failures": 24,

    "passes": 238,

    "skips": 59,

    "total": 321,

    "totalDuration": 0.10700000333599746

  }

}

コンソール ログ

[2019-06-04 09:02:37,386 +00:00] channel stopped

テスト結果

{

  "logType": "Test_Result",

  "number": 35,

  "name": "MyTest",

  "testResult": [

    {

      "className": "TwentyTwoTest",

      "testName": "test4",

      "errorStackTrace": "java.lang.AssertionError: oops\n\tat org.junit.Assert.fail(Assert.java:88)\n\tat Base.BaseTestClassMethod(Base.java:14)\n\tat TwentyTwoTest.test4(TwentyTwoTest.java:21)\n",

      "errorDetails": "oops",

      "status": "Failed",

      "duration": 0

    },

    {

      "className": "TwentyTwoTest",

      "testName": "test5",

      "status": "Passed",

      "duration": 0

    }

  ]

}

パイプライン ステージ

{

  "logType": "Pipeline_Stages",

  "number": 23,

  "name": "TestComplexPipeline",

  "stages": [

    {

      "id": 1,

      "stageId": "10",

      "name": "parallel stage",

      "status": "SUCCESS",

      "startTime": "2019-06-11 07:55:50,240 +00:00",

      "duration": 0.174,

      "pauseDuration": 0

    },

    {

      "id": 2,

      "stageId": "14",

      "name": "build",

      "status": "SUCCESS",

      "startTime": "2019-06-11 07:55:50,414 +00:00",

      "duration": 0.056,

      "pauseDuration": 0,

      "steps": [

        "StepName - Print Message,StepStatus - SUCCESS,StepDuration - 0.005,StepArguments - Building the app [app01] on node [1],StepExecutedOn - (master)"

      ]

    },

    {

      "id": 3,

      "stageId": "19",

      "name": "deploy",

      "status": "SUCCESS",

      "startTime": "2019-06-11 07:55:50,492 +00:00",

      "duration": 0.052,

      "pauseDuration": 0,

      "steps": [

        "StepName - Print Message,StepStatus - SUCCESS,StepDuration - 0.005,StepArguments - Deploying the app app01] on node [1],StepExecutedOn - (master)"

      ]

    }

  ]

}

クエリのサンプル 

このクエリ例は、[Jenkins - Job Overview (Jenkins - ジョブの概要)] ダッシュボードの [Jobs in Progress (進行中のジョブ)] パネルから引用されています。

_sourceCategory=Labs/Jenkins/Sourabh/Logs In_Progress
| json "name", "result", "number" as Job_Name, Result, Job_Number
| where Result = "In_Progress"
| first(_raw) by Job_Name, Job_Number
| json field=_first "jobBuildURL", "label", "nodeName", "jobStartTime", "jobRunDuration" as Job_URL, Job_Label, Node_Name, Job_Start_Time, Job_Run_Duration nodrop
| where ![subquery : _sourceCategory=Labs/Jenkins/Sourabh/Logs Job_Status
| json "name", "number" as Job_Name, Job_Number   
| count by Job_Name, Job_Number
| compose Job_Number, Job_Name]
| tourl(Job_URL, Job_Name) as Job_URL
| count by Job_Name, Job_URL, Job_Label, Node_Name, Job_Start_Time, Job_Run_Duration, Job_Number
| fields Job_Name, Job_URL, Job_Label, Node_Name, Job_Start_Time, Job_Run_Duration, Job_Number
  • この記事は役に立ちましたか?