0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pythonを用いてDDNSサーバのログをSlackに通知する方法

Last updated at Posted at 2024-11-21

はじめに

私が行った研究において,SlackのAPIとPythonを用いてVMからSlackにメッセージを送信する方法について知ることが出来たので,今回得た知識をまとめました.

事前準備

  • Slack apiからappを作成し,webook URLを取得する
  • 取得したURLをメモしておく

通知方法

Slackに通知する関数は以下のように作成しました.

#slackへの通知をする関数
def send_to_slack(message):
    webhook_url = #事前準備で取得したWebhookのURL
    payload = {
        "channel": "通知したいチャンネル名",
        "username": "通知するユーザ名",
        "text": message,
        "icon_emoji": ":ghost:" #好きなアイコンを記述
    }
    requests.post(webhook_url, json=payload)

DDNSサーバのログからslackに通知するメッセージを作成する関数は以下のように作成しました.
DNSマッピングがADDのもののみを通知するようにしています.
私はDDNSサーバをkeaで作成しており,他のソフトウェアで作成した場合,ログの形が違う可能性があるので修正する必要があるかもです.

#slackへ通知するためのテキストをログ文から生成する
def generate_message(line):
    global log_time, message_lst, add_remove_flag

    #DNSへの追加が成功していたらそのログの日時を小数点第2位まで取得する
    if "DHCP_DDNS_ADD_SUCCEEDED" in line:
        #4桁の数字(年度),2桁の数字(月)のようにして日時を取得する
        log_time = re.match(r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{2}', line).group()
        add_remove_flag = True

    elif "DHCP_DDNS_REMOVE_SUCCEEDED" in line:
        log_time = re.match(r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{2}', line).group()
        add_remove_flag = False

    #取得した日時と同じで,FQDNがあれば
    elif "FQDN:" in line and log_time in line:
        message = re.search(r'FQDN: \[(.*?)\.\]', line).group(1)
        message_lst.append(message)

    #取得した日時と同じで,IP Addressがあれば
    elif "Address:" in line and log_time in line:
        message = re.search(r'IP Address: \[(.*?)\]', line).group(1)
        message_lst.append(message)

    #IPアドレス,FQDNが追加されていれば
    if len(message_lst) >= 2:
        #Slackに通知
        fqdn = message_lst[0]
        ip_address = message_lst[1]

        if add_remove_flag:
            #連続でADDされていなければ通知
            if add_and_remove_check(fqdn):
                new_message = f"{fqdn} is binded new client.(ip_addr: `{ip_address}`)"
                send_to_slack(new_message)
                message_lst = []

        else:
            remove_text(fqdn)
            new_message = f"{fqdn} is removed client.(ip_addr: `{ip_address}`)"
            send_to_slack(new_message)
            message_lst = []

上記の関数を用いてSlackにメッセージを送信すると以下のように通知されます.
image.png

おわりに

本記事では,私が研究を通じて得たpythonを用いてDDNSサーバのログをSlackに通知する方法についてまとめました.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?