アプリケーションイベントからアラートをトリガーする方法

アプリケーションイベントからアラートをトリガーする方法

イベントソース、姉妹のLogicModule データソースは、アプリケーションとインフラストラクチャからイベントベースのコンテキストアラートをトリガーするための便利なフレームワークです。 データソースがアプリケーションとインフラストラクチャを時系列でポーリングしている間 データポイント、EventSourcesは、ログファイル、SNMPトラップ、syslog、Windowsイベントログなどから興味深いイベントをポーリング(またはリッスン)します。 LogicMonitorは、一般的なユースケース用にすぐに使用できるXNUMXを超えるEventSourceを提供しますが、独自のイベントソースを構築します スクリプトEventSource はるかに幅広いソースからの興味深いイベントのアラートを有効にすることができます。

興味深いイベントは何ですか?

CPU使用率、メモリ使用率、レイテンシーなどの従来の時系列データポイントを監視する場合は、データソースが最適です。 LogicMonitorは提供します すぐに使用できる何千ものデータソース 一般的なITベンダーと製品の場合、それぞれに興味深いデータポイントと事前設定されたアラートしきい値が豊富にあります。

監視対象のアプリケーションが、最近発生したすべての重大なアラームや、知っておく必要のあるイベントの特定のID /文字列など、興味深いイベントを公開した場合はどうなりますか? これらのイベントが頻繁に発生しないが、何が起こっているかを説明する重要なコンテキスト情報が含まれている場合はどうなりますか? ここでEventSourcesが登場し、興味深いイベントが発生したときにLogicMonitorでアラートをトリガーします。

この記事では、カスタマイズされたスクリプト化されたEventSourceを構築して、単純なHTTPURLとRESTAPIから公開された興味深いイベントを監視および警告する方法について説明します。

スクリプトEventSources

スクリプトEventSourcesは、埋め込みGroovyとして、またはCollectorのオペレーティングシステムでサポートされている他の外部スクリプト(Python、Ruby、PowerShellなど)として、Collectorで任意のスクリプトを実行できます。

タイプスクリプトイベント
埋め込まれたGroovyスクリプトとアップロードスクリプトファイルのオプションを含むスクリプトイベントコレクター属性

EventSourceは、XNUMX分からXNUMX日の頻度で、スケジュールに従ってスクリプトを実行するように構成されています。

3分をスケジュールする

スクリプトEventSourceを使用すると、アプリケーションのRESTAPIなどの無数のソースまたは単純なHTTPGET応答からコンテキストアラートを生成できます。 通常、スクリプトは、スクリプトを作成する言語に関係なく、次のことを行う必要があります。

  1. ブランド ソース付き
  2. クエリー 最新/前回の投票以降の新しい興味深いイベント
  3. 出力 次のJSON形式を使用して、イベントを(イベントを反復処理した後)標準出力に変換します。
{
  "events": [
    {
      "severity": "warn",
      "happenedOn": "Thu Jun 01 09:50:41 2017",
      "message": "this is the first message",
    },
    {
      "severity": "warn",
      "happenedOn": "Thu Jun 01 09:50:41 2017",
      "message": "this is the second message"
    }
  ]
}

スクリプトは、特定するイベントごとにXNUMXつの重要な属性を出力する必要があります。

  1. LogicMonitorアラートの重大度(警告、エラー、または重大)
  2. イベントのタイムスタンプ(サポートされている多数の形式)
  3. イベントのユニークなメッセージ

次に、コレクターは新しく出力されたイベントJSONを処理し、LogicMonitorポータル内の各イベントのアラートをトリガーします。

次に、いくつかの実用的な実際のユースケースを構成する方法を見てみましょう。

ユースケース1:Slackイベント

会社でSlackを管理していて、閲覧したことがある場合 Slackのステータスページ、あなたは時折の事件を見たかもしれません。 すぐに使える スラックイベント EventSourceを使用すると、LogicMonitorポータルにSlackを簡単に追加して、次のインシデントが発生したときにアラートのトリガーを開始できます。

  • SlackイベントのEventSourceをインポートする コアからポータルへ(まだ含まれていない場合)–このLogicModuleは、当社の製品のコアと見なされ、すぐに使用できます。
  • 加える Slack 任意のホスト名を使用して、[リソース]タブにデバイスを移動します。 この例では、system.hostname =“を使用できます。status.slack.com 
  • 追加「スラックサービス」をデバイスのsystem.categoriesプロパティに追加します。 これは、LogicMonitorに適用するように指示します スラックイベント このデバイスへのEventSource。
  • 埋め込まれたGroovyスクリプトを確認すると、何が起こっているかに気付くでしょう。
    • ブランド –この情報は、SlackのAPIへの非常に単純なHTTPGET呼び出しで公開されます。 認証は必要ありません!
    • クエリー –呼び出しが行われます https://status.slack.com/api/v2.0.0/current Groovyを使用する URL クラス:
def endpoint = "https://status.slack.com/api/v2.0.0/current"

def slackStatus = new JsonSlurper().parse(new URL(endpoint))

応答は、現在のインシデントを含む生のJSONであり、現在インシデントがないことを示しています(ブラウザーで上のAPI URLをクリックすると、ライブで表示されます)。

{"status":"ok","date_created":"2020-05-07T21:55:17-07:00","date_updated":"2020-05-07T21:55:17-07:00","active_incidents":[]}
  • 出力 –各インシデントを出力するには、次のようにします。
    • それらすべてを繰り返します slackStatus.active_incidents.each Groovyを作成するには 地図 (outMap)各イベントが追加されます
def outMap = ["events": []]
  • コレクターで現在のタイムスタンプを生成します now.format() 方法
def outMap = ["events": []]
  • コレクターで現在のタイムスタンプを生成します now.format() 方法
def now = new Date()
def tz = TimeZone.getTimeZone('PST')
def dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
def nowPST = now.format(dateFormat, tz)
  • 変換してインシデントを標準出力に出力します outMap JSONに変換し、標準出力に出力します。
def jsonOut = JsonOutput.toJson(outMap)
println JsonOutput.prettyPrint(jsonOut)
  • 最後に、他をカスタマイズできるようになりました アラート設定 次のようなEventSourceの
    • デフォルトのアラートレベル –スクリプトは、Slackインシデントを警告、エラー、およびクリティカルに自動的に分類しますが、ここでは警告が関係なく使用されます。
    • クリアアフター –これらはイベントベースのアラートであるため、アラートがクリアされるまでLogicMonitorで継続する時間を指定する必要があります。 デフォルトは60分です。
    • アラートの件名とメッセージ –必要に応じて、アラート通知の件名とメッセージをカスタマイズします。
アラート設定

要約すると、このEventSourceは、XNUMX分ごとにSlackのステータスページにクエリを実行してインシデントを探し、その後、インシデントが見つかるとアラートをトリガーします。

ユースケース2:LogicMonitor監査ログ

自分の興味深いアクティビティについてアラートをトリガーしたいと思ったことはありませんか LogicMonitor監査ログ、LogicModuleが更新されたときや、特定のユーザーがポータルでアクティブになっているときなど。 スクリプトEventSourceを使用することにより、 LogicMonitor REST API、および内部の一意の検索文字列 リソースのプロパティ、ポータルで特定のイベントが発生したときにアラートをトリガーするようにLogicMonitorを設定できます。

この例では、過去60秒以内に発生した新しい監査ログを照会するためのスクリプトEventSourceを作成します。 毎分ポーリング。 その後、ユーザー名(ボボロフカ)ポータル内でアクティビティがあります。

1.LogicMonitorポータルを表すデバイスをホスト名「」で追加します。.logicmonitor.com」。 コレクターは、このホスト名を使用してポータルのRESTAPIを監視します。

2.を構成します ユーザーアカウント (少なくとも)にアクセスできる 設定–アクセスログ、APIのみのサービスアカウントにすることができます。 を作成します APIトークン このユーザーのために、安全な場所に保存してください。

3. [リソース]タブの[デバイスの情報]タブで、APIトークンの詳細を次のように追加します。 lm.access.id 影響により lm.access.key プロパティ。

4.ここでは、アラートをトリガーする検索文字列のプロパティも追加する必要があります。 この例では、プロパティを使用します lm.auditlogs.error 値で ボボロフカ、これはいつでもエラーをトリガーします“ボボロフカ」は、新しい監査ログ内のどこかにあります。

カスタムプロパティ

このプロパティは、すべての監査ログ情報/列(ユーザー、IP、および説明)で検索文字列として使用されます。

監査ログ

5.次に、新しいスクリプトEventSourceを作成しましょう。 あなたは追加することができます LogicMonitor_Audit_Logs EventSourceからポータルへ コミュニティの投稿はこちら。 このEventSourceは、パブリックのCommunity LogicModuleとして提供されており、コアLogicMonitorプラットフォームの一部ではありません。

6. EventSourceのGroovyスクリプトでは、変数として使用するために以前に適用したすべてのResourceプロパティを取得することから始めます。

// *** Get LM Device Properties
def accessKey = hostProps.get("lm.access.key")
def accessID = hostProps.get("lm.access.id")
def eventWarn = hostProps.get("lm.auditlogs.warn")
def eventError = hostProps.get("lm.auditlogs.error")
def eventCritical = hostProps.get("lm.auditlogs.critical")
def hostname = hostProps.get("system.hostname")

7.このEventSourceは60分のスケジュールで構成されるため、過去XNUMX秒以内にのみ監査ログを照会します。 これを行うには、生成する必要があります エポックタイムスタンプ 両方のコレクターで 現在の時刻 影響により 60秒前。 エポックタイムスタンプは、LogicMonitor RESTAPIへの認証を設定するためにも使用されます。

// *** Get current time (now - 60s)
def epochCurrentSeconds = System.currentTimeSeconds()
def epochPreviousSeconds = epochCurrentSeconds - 60
def epochCurrentMillis = System.currentTimeMillis()

8.次に、REST APIベースURL、エンドポイント、およびクエリパラメーターを生成します。 上記のXNUMXつのエポックタイムスタンプを使用すると、これらは両方とも 監査ログAPI 時間枠内で監査ログのみを取得するためのクエリパラメータ( 起こった>: プロパティ)。 他の多くのアプリケーションRESTAPIも、タイムスタンプまたはエポックを使用した時間枠の制限をサポートしています。アプリケーションでこれが許可されているかどうかについては、ドキュメントを参照してください。

// *** Setup URL
def baseUrl = "https://" + hostname + "/santaba/rest"
def endpoint = "/setting/accesslogs"
// "happenedOn>:" set filter to only grab Audit Logs after a designated epoch timestamp
// Query parameters already URL-encoded in this string
def queryParams = "?filter=happenedOn%3E%3A" + epochPreviousSeconds + "&size=1000"
def apiUrl = baseUrl + endpoint + queryParams

9.次に、LogicMonitor REST API認証を設定し、HTTP GETを使用してクエリを実行し、過去60秒以内にすべての監査ログを取得します( CloseableHttpClient セクション以降は、 トライ/キャッチブロック より適切なエラー処理と終了を可能にするために、実際のEventSourceで)。 ザ・ LogicMonitor_Audit_Logs EventSourceは私たちから借りています サポートセンターの例 RESTAPIでHTTPGETを使用するため。

10.これが楽しい部分です。 使用します GroovyのJsonSlurperクラス HTTP応答本文を解析するには、それをJSONに変換し、イベントを追加するGroovyマップを作成します。

// *** Parse LM Audit Logs JSON
def jsonSlurper = new JsonSlurper()
def auditLogs = jsonSlurper.parseText(httpResponseBody)

// *** Create a map for standard output
def outMap = ["events": []]

11.取得した監査ログを繰り返し処理します(ある場合)。 検索文字列を使用する(イベント警告, イベント警告, イベントクリティカル)リソースプロパティから以前に取得して、各監査ログのXNUMXつのフィールドのいずれかに一致するものがあるかどうかを確認します。 説明, ユーザー名、 影響により ip。 一致するものがある場合は、監査ログをに追加します outMap:

// Search Audit Log for matching pattern for Warning property, lm.auditlogs.warn
        if (description =~ eventWarn || username =~ eventWarn || ip =~ eventWarn) {
            def event = ["happenedOn": auditLog?.happenedOnLocal,
                            "severity": "warn"]
            def message = "username: " + username + ", ip: " + ip + ", description: " + description
            event.put("message", message)
            outMap.events += event
        }

12.次に、変換してアラート監査ログを印刷します outMap JSONに変換し、標準出力に出力します。

// Convert the map to JSON and print to standard output
def jsonOut = JsonOutput.toJson(outMap)
println JsonOutput.prettyPrint(jsonOut)
return 0

13.最後に、EventSourceスケジュールをに設定します 1分 と保存します。

スケジュール1分

それでおしまい! 今、ユーザーアカウント「ボボロフカ」はLogicMonitorポータル内でアクションを実行します。エラーは、内のアラートに関するコンテキスト情報でトリガーされます。 アラート値 フィールド:

アラート

LogicMonitorによるカスタム監視

これらのユースケースでは、スクリプトEventSourceを使用して、アプリケーションのHTTPURLおよびRESTAPIから興味深いイベントをクリエイティブにフェッチしてアラートを出す方法の例をいくつか取り上げます。 アプリケーションに文書化されたRESTAPIがある場合、公開されて取得可能な有用なイベント情報が見つかる可能性があります。 認証, クエリ、 影響により 出力 カスタムEventSourceによってアラートをトリガーするイベント。

LogicMonitor プロフェッショナルサービス 要件に合わせて調整されたカスタムLogicModule(EventSourcesなど)を顧客に提供します。 構築の支援が必要な複雑またはカスタムの監視が必要な場合は、スコープと価格設定の詳細についてカスタマーサクセスマネージャーにお問い合わせください。

ベネットボロフカ

ソリューションアーキテクチャマネージャー

ベネットは、2015年からLogicMonitorのプロフェッショナルサービスの不可欠なメンバーです。彼は、世界中でITインフラストラクチャ、アプリケーション、およびソリューションを展開および管理してきた13年以上の経験があります。 一方で、ベネットはゴルフ、旅行、キャンプ、そして素晴らしいアウトドアの探索が大好きです。

LogicBlogを購読して、LogicMonitorの最新の開発に関する最新情報を入手し、ITエキスパートとエンジニアのワールドクラスのチーム、およびITプロフェッショナルが愛する製品。

LogicBlogの他の記事

アンペアロボット 影

お店の話をしましょう。

STARTED GET