Help us understand the problem. What is going on with this article?

PowerShellでログファイルを監視してWebhookで通知する

はじめに

本記事は、WindowsのPowerShellを用いて、アプリケーションが出力するログファイルを監視する方法について記載しています。また、特定のエラーメッセージ検知時にWebhookを使用してチャットアプリに通知します。

監視対象とするログファイルは、Cドライブ配下などに出力するテキストのログファイルを対象とします。

Windoows Serverで監視ソフトウェアを導入することなく、特定のメッセージを検知時に通知したいといった小規模な監視が実現できます。

Webhook

slackやRocket.Chatなどのチャットアプリは、Webhookとしてcurlを使用する場合がほとんどです。

通知の仕組みを作る考え方として、連携したいチャットアプリがSDK等を公開していて、Pythonなどのライブラリを使用できるのであれば、Pythonで書いた方がスマートな場合もあります。本記事では、WindowsでWebhookを使用するための方法を前提とします。

現在は、WSL(Windows Subsystem for Linux)という便利なものがあるので、WSLが使用できる環境であれば、WSLも一つの案だと思います。なお、Windows Server 2016では、Insider Preview build 16215以降に搭載されています。

要約するとWindows ServerでWebhookを使用するためには、curlが必要です。
curlを使用するために、curlから64bitのbinaryをダウンロードします。Providerは、特に理由がなければ「the curl project」でいいでしょう。

PowerShell

Powershellでログ監視の設定を行います。以下の例は、testフォルダ配下のtest.txtファイルに、ERRORの文字列が出力された場合、curl.batを起動してWebhookと連携します。

  • powershell.ps1
Get-Content -Path "C:\Users\test\Desktop\test\test.txt" -Wait -Tail 0 | ForEach-Object { If($_ -like "*ERROR*") { Start-Process -FilePath "C:\Users\test\Desktop\test\curl.bat" } }

batファイルでは、Webhookを使用するたにcurlの処理(※)を書きます。Windowsでcurlを使う場合のポイントは、文字列を適切にダブルクォーテーションの引用符でくくることです。また、引用符の中で引用符を使用する場合はエスケープを行います。日本語をメッセージとして出力させたい場合は別途、考慮が必要です。以下の場合、チャットアプリにERRORの文字列を通知します。

(※)例としてcurlのあるフォルダに移動して実行しています。

  • curl.bat
@echo off
cd C:\Users\test\Desktop\
curl-7.66.0-win64-mingw\bin\curl --request POST --header "Content-Type: application/json" --data "{\"text\":\"ERROR\"}" <WebhookのURL>

おわりに

上記、powershell.ps1とcurl.batファイルを配備し、powershell.ps1を実行すれば監視が始まります。Windoows Serverでちょっとした監視がしたいという場合に便利です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした