Slack에서 Zabbix 알림 받기 (How to integrate Slack and Zabbix)

힙챗(Hipchat)슬랙(Slack)은 요즘 많이 사용하는 IRC 대체 도구들이다. 이 도구들은 일정량 혹은 기능들들은 무료로 사용가능하다. 특정 프로젝트를 도와주고 있고, 커뮤니케이션 도구의 통합이 필요해보였다. 또한, 서비스 운영상의 알림들을 여기로 통합할 필요가 있었다. Slack 에서는 RESTful APIs 를 공개하고 있고, 이를 구현한 구현체 또한 많다. 이걸 사용하게 되면 Zabbix 에서 알림을 받을 수 있다.
이미 공개된 스크립트(https://github.com/ericoc/zabbix-slack-alertscript)가 있긴한데 인코딩 및 개행문자의 버그가 있어 직접 스크립트를 작성했다. 고작 몇줄…

As you know, many start-ups and people use free services such as HipChat or Slack to communicate with others. Recently I helped some project to integrate their communication channels. They wanted to integrate slack and monitoring systems such as Zabbix as well.
I have discovered that open source script(https://github.com/ericoc/zabbix-slack-alertscript) has some bug include encoding, literal problems. So, I wrote a few codes to alert message to Zabbix. It helps you if you want to integrate slack and Zabbix.

Pre Requirements

* Zabbix
* Python
* Slacker (https://github.com/os/slacker)

Install

1. Get api-key from Slack
1) Move to http://api.slack.com
2) “Create token” That’s it.

2. Save the script
vim /usr/lib/zabbix/alertscripts/zabbix-slack.sh

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Zabbix Slack Alert Script
"""

import sys
from slacker import Slacker
import datetime

if __name__ == '__main__':
    if len(sys.argv) != 4:
        exit(1)

    recipient = sys.argv[1]
    subject = sys.argv[2]
    body = sys.argv[3]
    now = datetime.datetime.now()

    message = "-----------------------------------------\n\nDate : %s\nSubject: %s\n\n%s" % (now, subject, body)

    #print message
    slack = Slacker('slack-api-key')
    slack.chat.post_message('#general', message)

3. Configure on Zabbix
1) Administrator > Media types > Add
– Name : Slack Notification
– Type : script
– Script name : zabbix-slack.sh

2) Users > user > Media tab > Add
– Type : Slack Notification
– Send to : any

3) Triggers

Results

하둡 설정 방법( How to configure Hadoop 2.X )

기술에 관심있는 많은 사람들이 하둡과 빅데이터에 대해서 알고 있습니다.(물론, 빅데이터 != 하둡) 그래서 하둡을 설치하고 운영하려고 합니다. 하지만, 많은 사람들이 하둡 설정에 대해서 어려워하고 어떻게 해야하는지 물어 보는데 설정법을 정리해서 공유합니다.

Nowadays tech guys know about Hadoop or Bigdata(Of course Bigdata != Hadoop). So, they try to install and operate Hadoop. However, soon they feel it’s hard to install or configure it. So many people ask how to configure Hadoop 2.X. Thus, I share my experience here.

1. 하둡의 설정파일 위치( Configuration file path of Hadoop )
$HADOOP_HOME/etc/hadoop

2. 핵심 설정 파일( Core configuration files )
– /etc/hosts
– core-site.xml
– hdfs-site.xml
– mapred-site.xml
– yarn-site.xml
– slaves

3. /etc/hosts

xxx.xxx.xxx.xxx namenode
xxx.xxx.xxx.xxx secondarynamenode
xxx.xxx.xxx.xxx datanode01
xxx.xxx.xxx.xxx datanode02
xxx.xxx.xxx.xxx datanode03
......
......
xxx.xxx.xxx.xxx datanode0N

4. core-site.xml

<configuration>
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://namenode:9000</value>
</property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/tmp</value>
</property>
</configuration>

5. hdfs-site.xml
$HADOOP_HOME 변수를 치환해야 합니다.(You have to replace the $HADOOP_HOME value.)

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.secondary.http.address</name>
    <value>secondarynamenode:50090</value>
  </property>
  <property>
    <name>dfs.hosts.exclude</name>
    <value>$HADOOP_HOME/etc/hadoop/exclude</value>
  </property>
  <property>
    <name>dfs.hosts</name>
    <value>$HADOOP_HOME/etc/hadoop/include</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/hadoop/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///data/hadoop/dfs/data</value>
  </property>
  <property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>/data/hadoop/dfs/namesecondary</value>
  </property>
  <property>
    <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
    <value>true</value>
  </property>
</configuration>

6. mapred-site.xml
$HADOOP_HOME 변수를 치환해야 합니다.(You have to replace the $HADOOP_HOME value.)

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobtracker.hosts.exclude.filename</name>
    <value>$HADOOP_HOME/etc/hadoop/exclude</value>
  </property>
  <property>
    <name>mapreduce.jobtracker.hosts.filename</name>
    <value>$HADOOP_HOME/etc/hadoop/include</value>
  </property>
</configuration>

7. yarn-site.xml

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>namenode</value>
  </property>
</configuration>

오픈소스 활동의 오해

많은 사람들이 오픈소스 활동에 대해서 관심이 무척이나 많다. 척박한 국내환경을 벗어날 수 있는 유일한 대안처럼 여기는 듯하다. 오해는 오해를 만들어 내며 잘못된 방향(묻지마 창업투자, 소프트웨어 수능과목 추진처럼)으로 이끌기도 한다. 난 예전부터 늘 지식공유 활동에 대해서 관심이 많았고, 오픈소스 활동을 한지는 사실 얼마되지는 않았다. ( 다른 사람들처럼 수년에서 십수년한게 아니니… ) 실제로 오픈소스 활동들을 하다보니 밖에서 보는 것과 실제로 느끼는 감정들이 다르다. 실제로 오픈소스 활동을 고민하고 있는 사람들을 위해서 글로 적고 싶다는 생각을 하였다.

1. 오픈소스를 꼭, 반드시 해야만 한다?

개발자 커뮤니티의 모임, 각종 컨퍼런스와 세미나에서 오픈소스 활동을 권장을 하고 있다. 큰 맥락에서 다 옳은 길이며 나또한 그렇게 믿고 사회를 발전 시키는 한 방법이라고 생각한다. 실제로 오픈소스 활동을 하면서 나의 보잘것 없는 실력을 깨닫기도 하고, 이런저런 시도를 하면서 발전을 하기도 한다. 하지만, 이 모든 것은 본인과 오픈소스 활동이 잘 맞을 때의 이야기이다. 오픈소스 활동은 일종의 문화활동, 취미활동과 유사하다. 따라서 본인과의 궁합(?)이 잘 맞는지가 아주 중요하다.

많은 엔지니어가 년초마다 새해결심들을 한다. 많은 항목들이 운동하기, 영어공부, 책 몇권 이상 읽기, 스터디 참석, 오픈소스 활동 등등의 것들일 것이다. 하지만,  우리에게는 24시간 밖에 주어지지 않고 모든 것을 다할 수 없다. 따라서, 결심이 실제 행동으로 옮겨지기까지는 많은 노력이 필요하다. 오픈소스 활동을 하기 위해서는 본인의 시간을 할애해야 한다. 실제로 행동에 옮겼더라도 많은 장애요소들이 많다. 특히 남의 코드를 읽는 일, 실력, 언어의 장벽은 노력해도 참 어렵다.

업무와 어느정도 연관이 있어 활동하는 나도 주당 몇시간 이상을 퇴근 후 메일링리스트를 읽고 답변하고, 코드를 읽으며 활동하다보면 어느덧 자정이다. 회사에서 일하며 지친몸으로 친구와의 치맥의 유혹을 벗어던지고도 이러한 활동들이 즐겁다면 본인에게 맞는 것이다. 그렇지 않다면, 기혼자라면 자식들과의 시간을, 미혼자라면 연애를 하는것이 인생을 훨씬 잘살아가는 방법일 것이다. 사랑을 하기에도 인생은 짧은거 같다. 오픈소스활동은 개발을 좋아하는 사람들의 한가지의 방법이라는 것으로 인식하는 것이 중요하며 단지 무슨 무슨 커미터라는 타이틀만 보고 덤비기에 이세계 사람들은 뜨네기를 너무나도 잘 안다.

2. 오픈소스 커미터들은 슈퍼개발자?!

스타트업에서 정의하는 슈퍼개발자와 일정규모 이상의 조직에서 정의하는 슈퍼개발자가 다르듯 상황에따라 슈퍼 개발자는 다르게 정의된다. 단어 자체가 가지는 모호한 성격이 있다. 오픈소스 커미터 또한 슈퍼개발자로 바라보는 일부 시선이 있는듯 하다. 나또한 예전에는 그렇게 바라보았고 동경해왔던 것이 사실이다.

하지만, 실제 활동을 하다보니 앞서 얘기한 것처럼 활동 자체를 즐기는 사람들이 아니면 꾸준히 하기 어렵고, 개발(프로젝트)을 정말 좋아하는 사람들이 아니면 이러한 활동들을 하기 어렵겠다라고 많이 느낀다. 시간을 많이 쓰다보니 커미터들의 개발실력은 당연히 어느정도 갖추어지는 것은 맞는듯하지만(확률상) 모든 것을 다 알며 개발하는 것은 아니다. ( 느끼기에 타고난 머리가 있는 사람들도 있지만 사실 시간을 많이쓴 사람들이 더 많은 느낌이다.) 따라서, 오픈소스 커미터를 슈퍼개발자 혹은 동경의 대상으로 바라보기보다는, 활동자체를 즐기며 개발을 즐기는 사람이라고 보는 것이 더 객관적인 평가일듯 하다.

마무리,

오픈소스가 무조건적인 ‘선’, 상업적인 소프트웨어가 무조건 ‘악’ 이 아니다. 서로의 영역들이 존재하고 서로 긍정적인 경쟁을하며 IT업계가 더 발전하고 있다. 지식이 공유되며 사회가 발전하는 것이라고 믿고 있고, 오픈소스 활동또한 이러한 맥락이라고 생각한다. 하지만, 무조건적인 찬양은 지양해야하며 객관적인 시선을 유지할 필요가 있다. 자기의 시간을 할애하면서도 오픈소스 활동에 도전을 하고 싶다면 아래 슬라이드가 도움이 될 것이다.

2013년 10대 키워드

  • 첫사랑 설램과 사랑
  • 영어
  • OSCON 2013 발표
  • 아파치 커미터
  • KTH 구조조정, 그리고 KT
  • 두번째 미국 방문
  • 공개 소프트웨어 공헌상
  • 컨설팅과 한계
  • L* 로 차 변경
  • 모모팀 여행

아파치 프로젝트 메일링 리스트 구독하기( How to subscribe or unsubscribe ASF mailing list )

많은 사람들이 오픈소스 활동에 관심이 많지만 ( 스스로 프로젝트를 만들든 기존 프로젝트에 참여하든 ) 참여하는 비율은 굉장히 적다.
오픈소스 프로젝트라고해서 엄청 특별하다거나 이런게 아니다(어차피 사람들이 하는거니) 회사에서의 프로젝트 처럼 코드작성 외에 많은 일들이 있고, 어떤 형태든 참여가 필요하다.
짧은 생각으로는 많은 사람들이 코드커밋만이 참여라고 생각해서 참여가 적은듯한데, 참여의 시작은 ‘관심’이다. 어차피 오픈소스 프로젝트도 사용자가 있고 다양한 의견을 바탕으로 프로젝트의 품질을 더 높이게 된다. 보통 오픈소스 프로젝트들은 메일링 리스트로 서로의 의견을 나누게 되는데, 이번 글에서는 아파치 메일링리스트를 구독하는 법을 알아보도록 하겠다. 아래 예제는 유저그리드 프로젝트를 기반으로 되어있는데 아파치재단 하에 있는 프로젝트는 다 비슷하다.

1. 오픈소스 프로젝트 사이트 방문

아파치 유저그리드 사이트

사이트 주소 : http://usergrid.incubator.apache.org/

2. 메일링 리스트 주소 확인

메일링 리스트를 설명해둔 란을 찾는다. 보통 사용자, 개발자, 커밋 3가지 메일링리스트가 있고 3개의 역할이 조금씩 다르다. 보통 사용자, 개발자 2개를 구독한다.

Check mailing list

3. 메일링 구독하겠다고 발송

메일을 받고 싶은 곳에 로그인 후에 메일을 쓴다. 수신인에 user-subscribe@usergrid.incubator.apache.org 으로 1통, dev-subscribe@usergrid.incubator.apache.org 1통을 보내자. (제목, 내용은 상관없다)

4. 인증메일이 도착하고 다시 메일 발송

위와같이 확인을 위해서 다시 짧은 답장을 보내라고 한다. 그래서 바로 그냥 답장하면…

5. 메일링 구독완료

아파치재단의 모든 사이트는 메일링 리스트 구독에 대해 안내하게 되어있는데, 예시로 그루터에서 활발히 개발하고 있는 타조(Tajo) 또한 이렇게 메일링 리스트가 공개되어있고 구독할 수 있다. 그냥 관심만 가지는게 아니라 관심이 조그마한 행동으로(메일링 리스트 구독)이어지고 이렇게 계속적으로 관심이 이어지다보면 우연찮은 기회로 여러분들이 오픈소스 프로젝트에 참여하게 될 것이다. ;)

6. 메일링 구독해지신청

2013.12.07 추가된 내용이다. 페이스북이나 트위터를 통해서 구독방법을 공유했고, 해지하는 법도 알았으면 좋겠다는 피드백을 받고 이렇게 추가를 한다. 해지방법은 구독방법과 유사하지만 해지신청하는 메일주소가 다르다. 방금전 구독완료되었다는 메일에서 조금만 내려보면 아래와같은 내용과 메일주소가 나온다.

위메일로 메일을 보면 바로 해지가 된다.

해지완료메일

아파치 커미터가 되다! ( Apache Usergrid )

저는 한국에서 BaaS(Backend As A Service) 프로덕트인 baas.io 를 만들고 있습니다. 국내에서 보기드물게 개발자 문화를 만드려고 노력하였던(만들어 나가던) KTH에 합류해서 baas.io 를 만들게 되었고, 2012 H3에서 baas.io 런칭을 위해서 동료들과 함께 고생했던 기억들이 새록새록 떠오르네요.

2012.11.01 부터 비공개 서비스를 시작하게 되었고 현재까지 꾸준히 서비스는 성장을 하고 있습니다. 안타깝게도(혹은 좋은 경험을 한 개발자를 업계로 돌려보내서 고맙게도) KTH는 구조조정을 하게 되었고 수익성이 없는 사업은 접혔고, 보았던 동료를 내일 볼 수 없는 안타까운 상황을 맞이했습니다.( 인생에서 한번의 경험이면 족할듯 합니다… ) 올해 초 이런저런 복잡한 상황들을 뒤로하며 우여곡절끝에 baas.io 프로젝트는 KT에 이관되어 계속 훌륭한 팀장, 동료들과 함께 일하고 있습니다.

baas.io는 많은 오픈소스를 사용하고 있고(공개SW로 일체 구성된 백엔드 서비스로 BaaS 시장 개척), 해당 프로젝트에서 사용하고 있는 Usergrid 프로젝트에 지속적으로 컨트리뷰션하게 되었습니다. 소소한 버그, 기능개선 등 꾸준히 그냥 재미있어서 내가 쓰고 있는 오픈소스에 내 이름이 올라가는 게 신기하고 그리고 오픈소스를 사용하며 받은 많은 것들 중 일부는 돌려줘야 한다는 생각들로 컨트리뷰션을 하였습니다. 그게 벌써 1년이 되었네요. 그리고 Usergrid는 아파치 인큐베이터로 편입되고 저는 Apache Usergrid의 커미터로 활동하게 되었습니다!

Apache Usergrid

Usergrid는 Ed Anuff(http://www.crunchbase.com/person/ed-anuff) 가 창시했고, Apigee 에 인수 되면서 Apigee의 App Service라는 이름의 제품으로 자리매김하였습니다. BaaS의 형태가 그럿듯 Web+Mobile 에서 서비스를 만들기 위해서 공통기능들이 있고 해당 기능들을 쉽게 만들 수 있도록 도와줍니다. Usergrid는 RESTful API + Cassandra Cluster 에서 동작하며 다양한 엔티티간의 관계들을 연결해주며 확장가능한 서비스를 할 수 있도록 도와줍니다.

아파치 인큐베이터로 편입되었으니 여러가지 목표를 가지고 진행하게 될 것입니다. 기대됩니다. 2012 H3 때 오픈소스로 개발 실력쌓기라는 내용을 공유했는데, 더욱 더 한단계 도약할 수 있는 기회를 얻게 되었네요.

이런 경험들이 한국에서 많아져야 한다는 것이 저의 생각이고 그 길을 꾸준히 가면 된다고 생각합니다. 아파치 프로젝트로 편입되면서 SW마에스트로와 모모팀을 통해서 알게된 한륜희라는 후배와 함께 Apache Usergrid 웹사이트 제작을 공헌하며 이러한 생각들이 더욱 명확해졌습니다. 오픈소스 활동을 하며, 경험한 내용들은 많은 분들을 위해서 공유드리겠습니다.

사실, 이건 길을 가다보면 만나는 행운이라고 생각합니다. 정말 감사한 일이고 주변에서 도와주신 많은 분들에게 마음 깊이 감사함을 느낍니다.
그리고 이런 행운을 만끽하고 싶네요. 여러분들 새로운 도전을 응원해주세요! ;)

PS. OSCON 발표도전부터 아파치커미터가 되기까지의 기회와 도전에 대한 이야기는 DEVEIW 2013 에서 “당신의 인생에 오픈소스를 더하라 – OSCON 발표자 뒷담화” 라는 내용으로 함께 공유할 것이니 오시는 분들은 많은 참석해주세요.