Minecraft 서버 이벤트를 Slack에 알립니다.

소개



Slack이라는 채팅 도구에
  • 누군가 로그인/로그 아웃
  • 누군가 죽은

  • 같은 이벤트를 알리도록 합니다.

    이전에 쓴 CentOS7 + Systemd에서 Minecraft 서버 시작 / 자동 시작 / 자동 재부팅의 연속입니다.

    Slack이란?



    슬랙 지금은 멋지고 나우 채팅 도구입니다.
    Skype라든지의 동료군요. 꽤 사용하기 쉽습니다

    다양한 서비스와 연계할 수 있게 되어 있으므로 그 구조 이용합니다.

    로그를 보는 방법



    마지막으로 systemd를 사용하여 Minecraft 서버를 시작했습니다.
    로그도 잘 해준다고 쓰면서 로그를 보는 방법을 소개하지 않았습니다.

    다음 명령으로 로그를 볼 수 있습니다.
    journalctl -a -o cat -u minecraft_server
    

    systemd를 사용하면 journald라는 녀석이 로그를 취하게 됩니다.journalctl 명령은 journald에 저장된 로그를 보는 명령입니다.

    알림 메커니즘



    로그의 확인 방법도 알았는데, 이번에 만들어내는 구조의 전체상입니다.



    journald에 저장된 로그를 fluentd라는 도구를 사용하여 Slack에 던집니다.
    fluentd는 로그 수집 도구입니다. 수집뿐만 아니라 수집한 로그를 또 어딘가에 전송하는 중계도 해줍니다.

    슬랙의 통합 설정



    Slack에 통지하기 위한, Incoming Webhook URL이라고 하는 것을 취득합니다.

    먼저 Slack 메뉴의 Configure Integrations를 클릭하여 Integration 설정 화면을 엽니다.



    아래쪽에 "Incoming Webhooks"라는 것이 있으므로 "View"버튼을 클릭하십시오.



    설정 화면이 표시됩니다.
    알리고 싶은 채널을 선택하고 "Add Incoming WebHooks Integration"버튼을 클릭하십시오.



    이제 Webhook용 URL을 만들었습니다.
    아래쪽의 "Copy URL"을 클릭하면 URL이 클립보드에 복사됩니다.



    fluentd 설정



    이제 fluentd를 Minecraft 서버에 설치합시다.
    curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
    

    fluentd용 두 개의 플러그인을 설치합니다.
    td-agent-gem install fluent-plugin-grep
    td-agent-gem install fluent-plugin-slack
    

    fluentd 설정 파일을 편집합니다.

    /etc/td-agent/td-agent.conf
    <source>
      type tcp
      port 24425
      format json
      tag minecraft.raw
    </source>
    
    <match minecraft.raw>
      type grep
      input_key MESSAGE
      regexp joined|left|drown|slain
      tag minecraft.greped
    </match>
    # regexpに通知したいメッセージの条件を正規表現で書く
    
    <match minecraft.greped>
      type slack
      webhook_url https://hooks.slack.com/services/XXX/YYY/ZZZ
      channel minecraft
      username Minecraft Server
      icon_emoji :metal:
      message_keys MESSAGE
      flush_interval 1s
    </match>
    # webhook_urlは取得したWebhook URL
    # channelは通知するチャンネル
    # usernameは通知するときに表示するユーザー名
    # icon_emojiは通知するときに表示するアイコンを絵文字で指定できる
    

    마지막으로 fluentd를 활성화하고 시작합니다.
    systemctl enable td-agent
    systemctl start td-agent
    

    알림 설정



    journald의 Minefraft Server 로그를 fluentd로 보내는 설정을합니다.
    이것에도 systemd를 사용합니다.

    보내기 위해 Netcat이라는 소프트웨어를 설치합니다.
    yum install -y nc
    

    다음과 유사한 로그를 보내는 스크립트를 /home/minecraft/minecraft/transfer_log에 작성하십시오.

    /home/minecraft/minecraft/transfer_log
    #!/bin/bash
    
    /usr/bin/journalctl -af -o json -u minecraft_server | /usr/bin/nc 127.0.0.1 24425
    

    스크립트에 실행 권한을 부여합니다.
    chmod +x /home/minecraft/minecraft/transfer_log
    

    다음과 같은 파일/etc/systemd/system/transfer_minecraft_log.service을 만듭니다.

    /etc/systemd/system/transfer_minecraft_log.service
    [Unit]
    Description=Transfer Minecraft Server Log
    After=minecraft_server.service td-agent.service
    
    [Service]
    ExecStart=/home/minecraft/minecraft/transfer_log
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    마지막으로 알림 스크립트를 시작합시다!
    systemctl daemon-reload
    systemctl enable transfer_minecraft_log
    systemctl start transfer_minecraft_log
    

    이상입니다!
    잘하면 이런 식으로 Slack에게 통보됩니다.

    좋은 웹페이지 즐겨찾기