관리자는 시스템에 문제가 생겼을 경우 이에 대한 빠른 조치가 필요합니다. TUNALABS.IO에서 문제에 대한 알림을 이메일 대신 문제 발생시 즉시 푸시알림을 받을 수 있는 LINE 메신저를 고려하게 되었습니다.
이번에는 LINE Notify로 LINE으로 메시지 보내는 방법과 TUNALABS.IO의 응용사례를 소개합니다.
Access Token 발급받기
https://notify-bot.line.me/my/ (LINE 계정 필요)
위 페이지로 이동하여 [Generate token]버튼을 클릭하여 token명과 알림을 보낼 유저를 선택 후 access token을 발급받습니다.
발행된 access token은 발행최초 한 번만 보여주기 때문에 잘 메모해두어야 합니다.
저의 같은 경우 알림을 여러 명이 받아야하기 때문에 알림을 단체채팅방으로 보내도록 token을 발급받았습니다.
access token 발급 후 연결된 대화방을 보여주고 있습니다.
알림 보내기
curl -X POST \ https://notify-api.line.me/api/notify \ -H 'authorization: Bearer [ACCESS_TOKEN]' \ -d message=tuna-labs-messageQ
위 CURL 명령어를 사용하여 간단한 텍스트 메시지를 보내보겠습니다.
명령어를 실행하면 다음과 같이 LINE Notify 공식계정으로부터 알림을 받을 수 있습니다.
curl -X POST \ https://notify-api.line.me/api/notify \ -H 'authorization: Bearer [ACCESS_TOKEN]' \ -d 'message=tuna-labs-image&imageThumbnail=[IMAGE_URL]&imageFullsize=[IMAGE_URL]'
텍스트 메시지와 사진을 포함하여 보내려면 imageThumbnail와 imageFullsize의 두 Key 값에 이미지 URL을 넣고 명령어를 실행하면 다음과 같이 메시지와 함께 사진도 같이 전송됩니다.
PHP 예제
TunaLabs에서 PHP 기반으로 구현한 알림 시스템 코드 중 일부입니다.
텍스트 메시지만 보내거나 텍스트 메시지와 사진을 함께 보낼 수 있도록 하였습니다.
<?php namespace Powershit; /** * Class Powershit * @package Powershit */ class Powershit { const SERVICE_LINE_NOTIFY_API_URL = "https://notify-api.line.me/api/notify"; const SERVICE_LINE_NOTIFY_TOKEN = "ACCESS_TOKEN"; /** * Powershit constructor. */ function __construct() { } /** * @param $msg * @param null $imgUrl * @return bool|null */ public function sendMessageToLineNotify($msg, $imgUrl = null) { if ($imgUrl === null) { $postData = [ "message" => $msg ]; } else { $postData = [ "message" => $msg, "imageThumbnail" => $imgUrl, "imageFullsize" => $imgUrl ]; } $fields = ''; foreach ($postData as $key => $value) { $fields .= $key . '=' . $value . '&'; } rtrim($fields, '&'); $curlOptions = [ CURLOPT_URL => $this::SERVICE_LINE_NOTIFY_API_URL, CURLOPT_POST => 1, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_POSTFIELDS => $fields, CURLOPT_HTTPHEADER => [ "authorization: Bearer " . $this::SERVICE_LINE_NOTIFY_TOKEN, "content-type: application/x-www-form-urlencoded" ], ]; $curl = curl_init(); curl_setopt_array($curl, $curlOptions); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { return null; } else { $lineResponse = json_decode($response, true); $lineResponse["status"]; if ($lineResponse === 200) { return true; } else { return false; } } } } $lineNotify = new Powershit(); $lineNotify->sendMessageToLineNotify('Message'); //$lineNotify->sendMessageToLineNotify('Test Message', 'http://image-url');
PHP 7 이상에서 정상작동 확인했습니다.
응용
TunaLabs에서는 시스템 상황을 이렇게 간편하게 알림을 받을 수 있도록 구현했습니다.
왼쪽은 HIT 알림과 온도 이상 알림, 오른쪽은 상황 보고서입니다.
PHP와 NODE.JS 기반으로 짜여진 스크립트로 모니터링 서버에 일정시간 간격마다 접속하여 설정한 데이터 필드를 쿼리합니다.
중요한 필드는 1분주기, 덜 중요한 필드는 5분 주기로 쿼리하여 설정된 상/하한값 범위에 들지 않거나(예를 들어 장비의 온도나 습도, 전압 등), 데이터 누락, 장비 미응답 등의 문제가 발생할 경우 즉시 라인 메신저로 푸시알림을 보내줍니다.
마지막으로 매 3시간마다 주요필드를 요약하여 그래프와 메시지를 함께 보내줍니다.
지금까지
LINE Notify를 사용하여 LINE으로 메시지를 보내는 방법을 알아보았습니다.
이메일은 맨날 확인하기는 귀찮고해서 주 사용 메신저가 라인인 관계로 이쪽으로 알림을 보낼 수 있는 방법을 이래저래 삽질하다가 LINE Notify를 발견하여 원하는 기능을 제대로 구현할 수 있었습니다.
참고
개발노트만 봤을 때는 이게 무슨 소리인가…엄청 고민했는데, 포스팅 덕분에 쉽게 이해가 됐습니다. 감사합니다!
고맙습니다. 제 글이 도움되셨다니 기쁘네요.