[scrap] 텔레그램(Telegram) 으로 서버 모니터링 하기

http://idchowto.com/?p=4027

idchowto_cover8

지난 시간에 이어 이번 시간에는 Telegram 으로 서버 모니터링 하는 방법에 대해 살펴보도록 하겠습니다.

먼저 갖춰져야할 환경조건은 다음과 같습니다.

 

<  환경조건 >

– 서버측
1. Telegram-cli 설치
2. lua 스크립트가 가동되어 있어야 함

– 클라이언트측
1. 인증된 Telegram 앱이 설치된 스마트폰

 

1. hello.lua 스크립트 문

function on_msg_receive (msg)

print(“Name : “, msg.from.print_name) — 메시지 보낸사람 real name (Sunkyu)
print(“Phone : “, msg.from.phone) — 메시지 보낸사람 전화번호 (8210AAAABBBB)
print(“Msg Num : “, msg.id) — 메시지 번호^M print(“to.Name : “, msg.to.print_name)

if ( msg.text == ‘hello’ ) then
send_msg(msg.from.print_name, “world”, ok_cb, false)  — hello 라고 메세지가 오는 경우 world 로 응답해라
return
end
end
function ok_cb(extra, success, result)
end

클라이언트로부터 메세지를  수신하면 on_msg_receive 함수가 호출됩니다.

이 함수 내에서 send_msg, send_photo, send_text 등의 함수를 이용해서 메세지를 상대에게 보낼 수 있습니다.

위 스크립트 문에서는 ‘hello’ 를 수신하면, ‘world’ 라는 결과를 보내줍니다.

위와 같이 작성한 다음 telegram-cli 를 이용 lua 스크립트를 호출합니다.

 

2. telegram-cli 실행해서 위에서 작성한  hello.lua 스크립트 호출

# bin/telegram-cli -s hello.lua

또는

# bin/telegram-cli -s hello.lua -d &

와 같이 데몬 형태로 실행할 수 있다.

 

3. 클라이언트에서 hello 메세지를 보낸 후 서버측 상태 

User Sunkyu is typing  — 클라이언트 (Sunkyu) 에서 메시지를 보내고 있음
> Name :     Sunkyu
Phone :        8210AAAABBBB
Msg Num :   1831
to.Name :    Sunkyu  — 메시지 수신한 경우 관련 정보 출력시킴
[16:44]  Sunkyu >>> hello — 클라이언트에서 보낸 메시지 hello 출력
> Name :     Sunkyu
Phone :        8210AAAABBBB
Msg Num :   1832
to.Name :    Sunkyu  <<< world — hello 메세지에 대한 응답으로 클라이언트에 world 로 응답함.

 

4. 실제 클라이언트 (스마트폰) – 서버(Telegram-cli) 간 메세지를 보내고 받은 상태

Screenshot_2014-10-22-16-45-14

 

5. 서버측에 출력된 메세지

P141021_125048

아래는 메세지 명령에 대한 lua 스크립트와 서버 bash shell 을 이용 명령 처리후 리턴 메세지를 처리한 예입니다.

이번에는 서버측에 특정 메시지(명령)을 보내 내부 처리 후 답변을 받는 것에 대해 살펴보겠습니다.


6. 서버측 자원 모니터링을 위한 lua 스크립트 (mrtg, help) 축약 

dir_cmd = “/home/telegram/cmd” — bash shell 명령 스크립트 디렉토리
mrtg_dir = “/home/telegram” — MRTG 이미지 출력 디렉토리
cmd_ping = “cd “.. dir_cmd ..”; sh ping.sh” — ping 이라는 메세지 (명령)이 들어온 경우 호출할 bash shell 스크립트
cmd_mrtg = “cd “.. dir_cmd ..”; sh mtg.sh” — mrtg 이라는 메세지 (명령)이 들어온 경우 호출할 bash shell 스크립트
cmd_help = “cd “.. dir_cmd ..”; sh help.sh” — help 이라는 메세지 (명령)이 들어온 경우 호출할 bash shell 스크립트

… 중략 …

if ( cmd == ‘mrtg’ ) then
os.execute(cmd_mrtg .. arg)
file_name = mrtg_dir .. “/” .. “mrtg.png”

if ( file_exists(file_name) ) then
send_photo(user_id, file_name, ok_cb, false)
end
return
end

– ‘mrtg’ 라는 메세지 (명령)이 들어오면 cmd_mrtg 에 의해 내부 처리 후 send_photo 명령을 이용,
요청한 클라이언트 측에 mrtg 이미지를 보내는 구문입니다.

if ( cmd == ‘help’ ) then
send_text(user_id, ‘/home/telegram/help.txt’, ok_cb, false)
end

– ‘help’ 라는 메세지 (명령)이 들어오면 특정 디렉토리에 위치한 text 파일을 읽어 send_text 명령을 이용,
요청한 클라이언트 측에 text 를 보내는 구문입니다.

.. 이하 생략 ..

 

7. 지금 traffic 에 대한 mrtg 그래프를 보여줘!

Screenshot_2014-10-21-14-28-48


8. 수신된 mrtg 이미지 확대해서 보기

Screenshot_2014-10-21-14-29-00

 

9. help 메세지(명령)을 보내면 서버측에서는 준비된 text 를 보내준다.
테스트해본 바로는 응답 서버측 text 파일 내에 한글이 들어가면 응답해주지 않는다. ㅠㅠ

Screenshot_2014-10-21-14-28-36

– 테스트에 사용한 모니터링 lua 스크립트는 좋은진호님 블로그를 참고하였습니다.

– Telegram-cli 는 Unofficial apps 입니다.  (https://telegram.org/apps)

– Telegram-cli 는 GPL Ver.2 라이센스를 따르며, 자세한 사항은 Telegram-cli 소스 내 LICENSE 파일을 참고하세요.
GNU General Public License, version 2 (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)

 

* 참고자료

좋은진호님 블로그 – http://truefeel.tistory.com/224
텔레그램 README-LUA – https://github.com/vysheng/tg/blob/master/README-LUA
Lua Check if a file exits – http://stackoverflow.com/questions/4990990/lua-check-if-a-file-exists
텔레그램 Messenger Client – http://www.forum-raspberrypi.de/Thread-tutorial-telegram-messenger-client-auf-dem-raspberry?page=2