Opsgenie を Jira と統合する
Opsgenie が Jira ユーザーに提供するもの
Opsgenie には、Opsgenie と Jira の双方向のインテグレーションを可能にする特定の更新セットがあります。インテグレーションを使用して、Jira に詳細情報と共に問題を Opsgenie に送信させます。Opsgenie はアラートを問題として Jira に転送します。Opsgenie は、オンコール スケジュールに基づいて通知する適切な担当者を決定します。メール、テキスト メッセージ (SMS)、電話、iOS、Android のプッシュ通知によって通知し、アラートが確認されるかクローズされるまでアラートをエスカレートします。
Opsgenie は、Jira On-Premise ユーザーが Opsgenie アラートを Jira に送信するための OEC ソリューションを提供します。詳細については、Jira でのアラートからの問題の作成のブログ投稿を参照してください。
統合の機能性
Jira で問題が作成または再オープンされると、インテグレーションによって Opsgenie でアラートが自動で作成されます。
Jira で問題が解決、クローズ、または修正されると、Opsgenie で関連するアラートが自動的にクローズされます。
Jira の問題にコメントが追加されると、Opsgenie の関連アラートにメモが追加されます。
[アラート更新を Jira に返送する] が有効な場合、Jira インテグレーションで作成されたアラートに対して選択したアクションが Opsgenie で実行されると、Jira のアクションが Jira で実行されます。
[Opsgenie アラート用の Jira の問題を作成する] が有効になっている場合、Jira 以外のソースを持つアラートに対して選択したアクションが Opsgenie で実行されると、Jira のアクションが Jira で実行されます。
このアクション マッピング機能の詳細については、以下の「アクション マッピング機能」セクションで説明します。
Opsgenie で Jira インテグレーションを追加する
Opsgenie の Free プランまたは Essentials プランを使用している、または Jira Service Management の Standard プランで Opsgenie を使用している場合は、チーム ダッシュボードからのみこの統合を追加できます。 このプランでは、[設定] の [統合] ページが利用できません。
[チーム] に移動して自分のチームを選択します。
左側のナビゲーションで [統合] を選択し、[統合を追加] を選択します。
統合をチーム ダッシュボードから追加すると、そのチーム統合の所有者になります。Opsgenie では、この統合を通じて受信したアラートはそのチームのみに割り当てられます。このセクションの残りの手順に従って、統合を設定してください。
[設定] > [統合] の順に移動します。Jira を検索して、[追加] を選択します。
統合設定で、[応答者] フィールドによって Jira アラートの通知先を指定します。入力し始めると、オートコンプリートの候補が表示されます。
Opsgenie エンドポイントと API キーを含むインテグレーション URL をコピーします。
[Save Integration (統合の保存)] を選択します。
Jira における設定
1. Jira に管理者としてログインします。
2. ダッシュボードから [管理] メニューを開きます。[システム] を選択します。
3. 左側の [詳細設定] の下の [Webhook] を選択します。
4. [Webhook の作成] をクリックします。開いたセクションで、Opsgenie の Jira インテグレーションによって提供された URL を URL 入力に貼り付けます。[作成] をクリックします。
Webhook が設定されたので、問題に変更が加えられたときに、Jira が Opsgenie に通知します。その後、Opsgenie はアラートを作成し、追跡します。
SSO の使用
SSO によって Jira にログインする場合は、API トークンを生成して統合設定のパスワードとして使用する必要があります。Jira で API トークンを生成する方法については「Atlassian アカウントの API トークンを管理する」をご参照ください。
新しいトークンを生成したら、Opsgenie の Jira 統合の [パスワード] フィールドにコピー & ペーストします。その後、統合を保存します。
アクション マッピング機能
Opsgenie では、ユーザーは Opsgenie と Jira の各アクション間のアクション マッピングを定義できます。
アクション マッピング機能を使用するには、以下に示す統合にいくつかの情報を提供します。
問題タイプ: Jira で定義されている問題タイプ。例: タスク、バグ、またはその他のカスタム定義タイプ。問題タイプの構文には、エラーがないように記述してください。
URL: Jira のドメイン名。例: https://testops.atlassian.net
ユーザー名: Jira へのログインに使用するメール アドレス。
パスワード / APIトークン: Jira へのログインに使用するパスワードまたは API トークン。
プロジェクト キー: アラートを作成するプロジェクトのキー。例: OT、OPS、SIT。プロジェクト キーは通常大文字ですので、正しい形式で記述してください。
Jira で作成されたアラートの場合
このセクションを使用して、アラートのソースが Jira である場合に Opsgenie のアクションを Jira のアクションにマッピングします (アラートが Jira インテグレーションによって作成された場合)。
異なる Opsgenie アクションを別々の Jira アクションにマップします。たとえば、アラートが確認されたときに、Jira の問題にコメントを追加します。これを行うために、アラートが Opsgenie で確認された場合は、コメントとして Jira の問題に追加します。マッピングは、 アラート更新を送信する Jira セクションに戻ります 。
Opsgenie のその他のアラートの場合
このセクションを使用して、アラートのソースが Jira でない場合、Opsgenie のアクションを Jira のアクションにマッピングします (アラートが別の統合によって作成された場合)。
このために、[Create Jira Issues for Opsgenie Alerts (Opsgenie アラート用の Jira 課題の作成)] セクションを使用します。この機能を使用するには、1 つの Opsgenie アクションを課題の作成 Jira アクションにマッピングします。Opsgenie アクションは「アラートが作成される」である必要はなく、他のアクションにもできます。
アラートにタグが追加され、他のアクションとは異なるアラート アクションに対してカスタム アクションが実行されます。これらのアクションのいずれかを選択すると、このマッピングが機能するタグまたはカスタム アクションを入力するための追加のフィールドが表示されます。
タグをカンマで区切って、複数のタグを入力します。複数のタグを入力した場合、マッピングは、指定されたタグが 1 つ以上アラートにある場合に機能します。タグのフィールドを空のままにすると、どのタグでもマッピングが機能します。
Opsgenie アクションが複数の Jira アクションにマッピングされている場合は、タグがアラートに追加されるとカスタム アクションがアラートに対して実行されるの各アクションを除いて、エラーが発生します。これらのアクションは、指定されたタグ名やカスタム・アクション名によって異なるため、複数のマッピングを保存します。
Opsgenie Jira インテグレーションでは、問題のステータスを Jira で [進行中]、[解決済み]、[完了]、または [終了] に設定できます。ただし、プロジェクトのワークフローでトランジションが許可されていない場合、Opsgenie を使用してトランジションを設定することもできません。
Jira から送信されるペイロードの例
JSON
{
"webhookEvent": "jira:issue_created",
"user": {
"self": "https://ifountain.atlassian.net/rest/api/2/user?username=msener",
"name": "msener",
"emailAddress": "mustafa.sener@ifountain.com",
"avatarUrls": {
"16x16": "https://ifountain.atlassian.net/secure/useravatar?size=xsmall&avatarId=10122",
"24x24": "https://ifountain.atlassian.net/secure/useravatar?size=small&avatarId=10122",
"32x32": "https://ifountain.atlassian.net/secure/useravatar?size=medium&avatarId=10122",
"48x48": "https://ifountain.atlassian.net/secure/useravatar?avatarId=10122"
},
"displayName": "Mustafa Sener",
"active": true
},
"issue": {
"id": "11601",
"self": "https://ifountain.atlassian.net/rest/api/2/issue/11601",
"key": "NAAS-155",
"fields": {
"summary": "test bug issuy",
"progress": {
"progress": 0,
"total": 0
},
"timetracking": {},
"issuetype": {
"self": "https://ifountain.atlassian.net/rest/api/2/issuetype/1",
"id": "1",
"description": "A problem which impairs or prevents the functions of the product.",
"iconUrl": "https://ifountain.atlassian.net/images/icons/issuetypes/bug.png",
"name": "Bug",
"subtask": false
},
"timespent": null,
"reporter": {
"self": "https://ifountain.atlassian.net/rest/api/2/user?username=msener",
"name": "msener",
"emailAddress": "mustafa.reporter@ifountain.com",
"avatarUrls": {
"16x16": "https://ifountain.atlassian.net/secure/useravatar?size=xsmall&avatarId=10122",
"24x24": "https://ifountain.atlassian.net/secure/useravatar?size=small&avatarId=10122",
"32x32": "https://ifountain.atlassian.net/secure/useravatar?size=medium&avatarId=10122",
"48x48": "https://ifountain.atlassian.net/secure/useravatar?avatarId=10122"
},
"displayName": "Mustafa Sener",
"active": true
},
"created": "2014-02-12T09:59:28.107-0500",
"updated": "2014-02-12T09:59:28.107-0500",
"priority": {
"self": "https://ifountain.atlassian.net/rest/api/2/priority/3",
"iconUrl": "https://ifountain.atlassian.net/images/icons/priorities/major.png",
"name": "Major",
"id": "3"
},
"description": "test deskriptin",
"issuelinks": [],
"customfield_10000": "126",
"status": {
"self": "https://ifountain.atlassian.net/rest/api/2/status/1",
"description": "The issue is open and ready for the assignee to start work on it.",
"iconUrl": "https://ifountain.atlassian.net/images/icons/statuses/open.png",
"name": "Open",
"id": "1",
"statusCategory": {
"self": "https://ifountain.atlassian.net/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "New"
}
},
"labels": [
"label2",
"label3",
"label1"
],
"workratio": -1,
"project": {
"self": "https://ifountain.atlassian.net/rest/api/2/project/10100",
"id": "10100",
"key": "NAAS",
"name": "Nofications as a Service",
"avatarUrls": {
"16x16": "https://ifountain.atlassian.net/secure/projectavatar?size=xsmall&pid=10100&avatarId=10011",
"24x24": "https://ifountain.atlassian.net/secure/projectavatar?size=small&pid=10100&avatarId=10011",
"32x32": "https://ifountain.atlassian.net/secure/projectavatar?size=medium&pid=10100&avatarId=10011",
"48x48": "https://ifountain.atlassian.net/secure/projectavatar?pid=10100&avatarId=10011"
}
},
"environment": "env",
"lastViewed": null,
"components": [
{
"self": "https://ifountain.atlassian.net/rest/api/2/component/10006",
"id": "10006",
"name": "Admin Web Application"
},
{
"self": "https://ifountain.atlassian.net/rest/api/2/component/10000",
"id": "10000",
"name": "Data Collector"
},
{
"self": "https://ifountain.atlassian.net/rest/api/2/component/10002",
"id": "10002",
"name": "Mobile App"
}
],
"comment": {
"startAt": 0,
"maxResults": 0,
"total": 0,
"comments": []
},
"timeoriginalestimate": null,
"votes": {
"self": "https://ifountain.atlassian.net/rest/api/2/issue/NAAS-155/votes",
"votes": 0,
"hasVoted": false
},
"fixVersions": [
{
"self": "https://ifountain.atlassian.net/rest/api/2/version/10000",
"id": "10000",
"description": "Private BETA",
"name": "v0.1",
"archived": false,
"released": false,
"releaseDate": "2012-01-31"
},
{
"self": "https://ifountain.atlassian.net/rest/api/2/version/10100",
"id": "10100",
"description": "Public Beta",
"name": "v0.2",
"archived": false,
"released": false
},
{
"self": "https://ifountain.atlassian.net/rest/api/2/version/10200",
"id": "10200",
"description": "First release of the iPhone app",
"name": "iPhone v0.1",
"archived": false,
"released": false,
"releaseDate": "2012-04-27"
}
],
"resolution": null,
"resolutiondate": null,
"creator": {
"self": "https://ifountain.atlassian.net/rest/api/2/user?username=msener",
"name": "msener",
"emailAddress": "mustafa.sener@ifountain.com",
"avatarUrls": {
"16x16": "https://ifountain.atlassian.net/secure/useravatar?size=xsmall&avatarId=10122",
"24x24": "https://ifountain.atlassian.net/secure/useravatar?size=small&avatarId=10122",
"32x32": "https://ifountain.atlassian.net/secure/useravatar?size=medium&avatarId=10122",
"48x48": "https://ifountain.atlassian.net/secure/useravatar?avatarId=10122"
},
"displayName": "Mustafa Sener",
"active": true
},
"duedate": "2014-02-28",
"watches": {
"self": "https://ifountain.atlassian.net/rest/api/2/issue/NAAS-155/watchers",
"watchCount": 0,
"isWatching": false
},
"worklog": {
"startAt": 0,
"maxResults": 20,
"total": 0,
"worklogs": []
},
"customfield_10103": null,
"customfield_10601": "Not Started",
"customfield_10102": null,
"customfield_10101": null,
"customfield_10600": null,
"customfield_10100": null,
"customfield_10506": null,
"assignee": {
"self": "https://ifountain.atlassian.net/rest/api/2/user?username=mberkay",
"name": "mberkay",
"emailAddress": "mberkay.assignee@gmail.com",
"avatarUrls": {
"16x16": "https://ifountain.atlassian.net/secure/useravatar?size=xsmall&avatarId=10122",
"24x24": "https://ifountain.atlassian.net/secure/useravatar?size=small&avatarId=10122",
"32x32": "https://ifountain.atlassian.net/secure/useravatar?size=medium&avatarId=10122",
"48x48": "https://ifountain.atlassian.net/secure/useravatar?avatarId=10122"
},
"displayName": "Berkay M",
"active": true
},
"customfield_10505": null,
"attachment": [],
"customfield_10504": null,
"customfield_10503": null,
"customfield_10502": null,
"customfield_10200": "110",
"customfield_10501": null,
"customfield_10500": null,
"versions": [
{
"self": "https://ifountain.atlassian.net/rest/api/2/version/10000",
"id": "10000",
"description": "Private BETA",
"name": "v0.1",
"archived": false,
"released": false,
"releaseDate": "2012-01-31"
},
{
"self": "https://ifountain.atlassian.net/rest/api/2/version/10100",
"id": "10100",
"description": "Public Beta",
"name": "v0.2",
"archived": false,
"released": false
},
{
"self": "https://ifountain.atlassian.net/rest/api/2/version/10201",
"id": "10201",
"description": "Second release of the iPhone app",
"name": "iPhone v0.2",
"archived": false,
"released": false
}
],
"customfield_10700": null,
"customfield_10400": null,
"timeestimate": null,
"customfield_10300": null,
"customfield_10301": null
}
},
"timestamp": 1392217168146
}
OEC による統合 (Jira Data Center を使用する場合)
Opsgenie の OEC と Jira Data Center スクリプトを使用して、Jira Data Center 内の課題を更新します。これにより、独自のスクリプトをデプロイしたり、提供されているスクリプトを変更したり、Jira Data Center でカスタマイズされたアクションを実行したりできます。
Jira Data Center 統合パッケージを使用するには、次のいくつかのセクションの手順を最後まで実行します。
OEC の最新バージョンをダウンロードする
Jira パッケージの最新バージョンをダウンロードするには、oec-scripts リポジトリの readme ファイルを使用してください。
インストール
Red Hat ベースのディストリビューションの場合
次のコマンドを実行します。
rpm -i opsgenie-jira-<your_version>.rpm
Debian ベースのディストリビューションの場合
次のコマンドを実行します。
dpkg -i opsgenie-jira-<your_version>.deb
Windows の場合
OEC パッケージを含む opsgenie integration の zip ファイルをディレクトリ内に解凍します (C:\opsgenie は優先パスです)。Windows に OEC をインストールするには、こちらの指示に従います。
OEC の実行方法について詳しくは、OEC の実行のドキュメントを参照してください。
OEC 用の Jira 統合の設定
Jira 統合に OEC ユーティリティを使用するには、統合設定で [Send Via OEC (OEC 経由で送信)] を有効にします。
Jira に関するその他の設定は、統合設定ページまたは OEC 設定ファイルを使用して行うことができます。統合ページで行われた設定は、設定ファイルよりも優先されます。
OEC 設定
Jira でアクションを実行できるようにするには、OEC で設定ファイルから設定パラメーターを取得します。
設定パラメーター
apiKey — 上記で作成した Jira インテグレーションから API キーをコピーします。
issueTypeName – 問題のタイプ。「タスク」、「バグ」、「ストーリー」、またはカスタム問題タイプ (「エピック」はサポートされていません) があります。
url – 問題の作成、解決、クローズなどが行われる Jira の URL。
username – Jira アカウントのユーザー名。
password – Jira アカウントのパスワード。
projectKey – このプロジェクト用に問題が作成されます
ダウンロードしたパッケージには、/usr/local/bin にある OEC ユーティリティと、/home/opsgenie/oec/scripts にある OEC によって実行する必要があるスクリプトも含まれています。OEC の構成が完了したら、OEC を実行する必要があります。OEC の実行方法の詳細については、OEC の実行に関するドキュメントを参照してください。
OEC に送信されるパラメーターの例
JSON
{
"summary":"test",
"issueTypeName":"Task",
"integrationName":"JIRA",
"sendViaOEC":true,
"description":"this is a test",
"integrationId":"3af28c92-b71c-459c-8d72-04a6f7f7ebac",
"url":"https://jiratestopsgenie.atlassian.net",
"password":"******",
"projectKey":"OPSGENIE",
"integrationType":"Jira",
"customerId":"04912a27-5fc1-4145-a6dd-8819afc0d870",
"alias":"c570a4cc-3f57-4b60-814e-f04c63e7442d",
"action":"Create",
"alertId":"c570a4cc-3f57-4b60-814e-f04c63e7442d",
"key":null,
"mappedAction":"createIssue",
"username":"jiratest@opsgenie.com"
}
トラブルシューティング
Jira で問題を作成するために必須のカスタム フィールドが設定されている場合、Opsgenie アラートから Jira の問題を作成することはできません。ただし、OEC を使用してスクリプトを設定することで、Jira チケットを作成できます。
アラートに対してアクションを実行しても問題にコメントを追加できない場合は、まず [ログ] ページを参照してください。URL に問題キーが含まれていない場合は、そのアラートから入力された Jira に問題がないことを意味します。したがって、存在しない問題にはコメントを追加できません。
Opsgenie の Jira インテグレーションにより、ユーザーは Jira で問題のステータスを [進行中]、[解決済み]、[完了]、または [クローズ] に設定できます。ただし、プロジェクトのワークフローでトランジションが許可されていない場合、Opsgenie を使用してトランジションを設定することもできません。
Opsgenie は、トランザクション名の大文字と小文字を区別してチェックします。Jira のトランザクション名はまったく同じはである必要があります (つまり、進行中、解決済み、完了、クローズ)。
4. Jira は ASCII 以外の文字をサポートしていません。ペイロードで ASCII 以外の文字を Jira に送信すると、「400 不正なリクエスト エラー」が発生する可能性があります。
5. Jira 統合がチームに割り当てられている場合、Opsgenie で作成されたアラートから Jira で課題を作成するには、他の統合も同じチームに割り当てる必要があります。そうでなければ、Jira 統合と他の Opsgenie 統合の両方にチームを割り当てないでください。
この内容はお役に立ちましたか?