Stoned's Blog

A startup hacker.

Setup Munin Notification

可参考http://munin-monitoring.org/wiki/HowToContact"

在munin.conf中添加

contact.me.command mail -s "Munin-notification for ${var:group} :: ${var:host}" xd_huang1986@163.com
contact.me.always_send warning critical

可修改邮件的内容,添加上下面所列的即可

contact.me.text  <munin group="${var:group}" host="${var:host}"\
graph_category="${var:graph_category}" graph_title="${var:graph_title}" >\
${loop< >:wfields <warning label="${var:label}" value="${var:value}"\
w="${var:wrange}" c="${var:crange}" extra="${var:extinfo}" /> }\
${loop< >:cfields <critical label="${var:label}" value="${var:value}"\
w="${var:wrange}" c="${var:crange}" extra="${var:extinfo}" /> }\
${loop< >:ufields <unknown label="${var:label}" value="${var:value}"\
w="${var:wrange}" c="${var:crange}" extra="${var:extinfo}" /> }\
</munin>

可以在某一个host上添加上

cpu.user.warning 20

进行测试,这样一旦cpu达到20,就会触发报警信息。可在每一个host下加上预警的数值

[chat;web2]
address 192.168.1.3
use_node_name yes
load.load.warning 6
load.load.critical 15

如果想添加短信提醒,可以开通短信服务,比如http://ipyy.net/。然后在配置文件中添加

contact.sms.command curl "http://ipyy.net/WS/Send.aspx?xxxxxxxx"

xxxxxx可参考短信服务提供的接口。

配置munin插件

接上文

安装ejabberd插件

可参考http://dev.groupdock.com/2010/10/05/monitoring-ejabberd-with-munin.html 具体步骤是:

  1. 创建具体监控的软链接

     sudo ln -s /usr/share/munin/plugins/ejabberd_ /etc/munin/plugins/ejabberd_users
    
  2. 配置ejabberd配置文件(/etc/munin/plugin-conf.d/munin-node.conf)

     [ejabberd_users]
     user root
    
     [ejabberd_*]
     env.vhosts yourhost.com
    
  3. 可通过sudo munin-run ejabberd_users(因为你的users是root,所以必须用sudo)进行测试
  4. 理论上这样就可以搞定了,但因为插件的更新速度更不上ejabberd的更新速度,所有很有可能不能用。以ejabberd_users为例,实际上munin只需要你运行/sbin/ejabberdctl connected_users_number,然后把值传给它,所以如果碰到问题,可以查看ejabberd_的代码,修改成合适的样子。

    监控某个端口的连接数

     ln -s /usr/share/munin/plugins/port_ /etc/munin/plugins/port_5222
    

自定义munin插件

可参考http://munin-monitoring.org/wiki/HowToWritePlugins

就像下面这个样子(你可以用任意语言来写),你就可以搞定了

#!/bin/sh

case $1 in
   config)
        cat <<'EOM'
graph_title Load average
graph_vlabel load
load.label load
EOM
        exit 0;;
esac

echo -n "load.value "
cut -d' ' -f2  /proc/loadavg

如果有权限问题,需要用root运行的话,可以在/etc/munin/plugin-conf.d/munin-node.conf中配置好所需要的用户,比如

[ejabberd_users]
user root
timeout 60

如果你的命令需要很长时间的话可以加上timeout 60这样的设置(参考http://munin-monitoring.org/wiki/plugin-conf.d

Setup Munin and Plugins

系统环境

Ubuntu 12.04

安装munin

安装munin-node

sudo apt-get install munin-node

安装munin server

sudo apt-get install munin

基础配置

munin-node 配置

配置文件地址

/etc/munin/munin-node.conf

需要修改的地方

配置文件为 /etc/munin/munin-node.conf 添加上master的ip地址,添加字段为如下,添加地方为 allow ^127.0.0.1$ 的后面。allow支持正则表达式

allow ^124\.232\.156\.224$

munin server 配置

配置文件地址

/etc/munin/munin.conf

需要修改的地方

添加如下客户端的信息,内容如下,如果有多个node,加入多个node的相关信息即可。web;web1代表的是web组,web1服务器

[web;web1]
address 127.0.0.1
use_node_name yes

[lvs;lvs1]
address 192.168.1.30
use_node_name yes

为munin server配置nginx路径

server {
  listen 80;
  server_name munin.yitu.me;
  expires off;
  auth_basic "Munin";
  auth_basic_user_file /var/cache/munin/htpasswd;
  root /var/cache/munin/www;
  }

先使用

htpasswd -c /var/cache/munin/htpasswd admin 

命令生成htpasswd文件,如果不存在htpasswd命令,先安装

apt-get install mini-httpd

打开地址 http://munin.xx.xx(自己在nginx里配置的地址,前提是先把dns转过来) 就可以看到被监控节点的信息了

munin服务启动

munin-node

service munin-node start

munin server

munin server 不需要启动,是通过cron job的方式去抓取信息的,安装成功之后就已经有了,不需要启动。可以通过

munin-check

来检查配置是否正确

munin 基础知识

  1. munin会使用munin这个用户运行munin相关的命令,所以有时候可以通过切换到munin用户debug

     su munin --shell=/bin/bash
    
  2. munin用到的路径地址

     # dbdir /var/lib/munin
     # htmldir /var/cache/munin/www
     # logdir /var/log/munin
     # rundir  /var/run/munin
     # plugins /var/etc/munin/plugins
    

插件配置

基础配置增强

sudo apt-get install munin-plugins-extra

安装passenger插件

mkdir munin && cd munin && git clone https://github.com/huangxiangdan/munin-plugins-rails.git
cd munin-plugins-rails/ && gem install munin-plugins-rails-0.2.12.gem
rvmsudo request-log-analyzer-munin install
rvmsudo request-log-analyzer-munin add <app_name> <path_to_log_file>

我的早起体验

上一篇思考到今天,差不多21天的时间。我用了21天的时间实践了我的早起的习惯。21天结束,特此记录一下实践结果。

21天时间能坚持早起的时间大概占了3/4左右,还有4天左右没有早起。没有早起的原因有两个,一是工作的原因,无法按时(晚上10点)入睡,坚持几天之后,发现睡眠不足,精神状态不佳,于是用了一两天让自己恢复精神。还有几天是因为自己生病,感冒了。感冒的前兆是特别嗜睡,于是感冒的这几天我就放弃了早起。但当我感冒好了以后,我想尝试恢复早起的时候,我失败了。幸好第二天(今天)我成功了,让我可以继续我的实践。

早起给我带来的最大的好处是帮自己多出了接近三四个小时的时间。帮自己提前进入一个良好的状态。21天,帮自己完美地扛过了工作上的压力。这段时间多了很多时间去陪伴图图。虽然在我无法早起的以后这些福利通通消失了,但至少,我找到了那把钥匙

所以,将早起变成一种习惯,规律生活,修身养性,能给我带来更平和的生活。

我的生活出了问题

在周末的一个傍晚(今天),醒来,看到书架的满满的我未曾看过的书籍,想起最近生活和工作的种种不适,于是冒出这种念头,“我的生活一定出了什么问题”。

乍看一下,我的生活似乎完全正常,有些压力,有些争吵,但都很快过去,就跟bug一样,很快就会被修复。但,我在思考,为什么总是重复出现相同的bug?重复出现bug的生活需要重构,重构之前需要先做code review。

生活似乎一切都很正常,这个“似乎”骗了我很长时间。其实,我一定可以提前发现一些逻辑上的漏洞,比如一年也不会去看一本书,比如很久没有兴奋到让我觉得打了鸡血,比如不会主动去踢球,不会主动去跑步。我总有一个借口,工作和生活总让我疲于应付,我没有时间想更多的事情。其实我更应该明白的是,这个念头本身其实就是最大的警告。我相信一个健康的生活是不应该有“疲于应付”这种东西的,我也相信我的理想的生活不该如此。我一定是那个喜欢看书,喜欢流汗的那个人。

但,哪里出了问题呢?

最直接的原因肯定是我自己,我缺乏了一些斗志,我不如去年那样对一些事情有强烈的兴趣,这可以归咎我于自己。我总是缺乏勤奋的基因,不够稳定,需要靠鸡血辅食。但生活呢?或许,生活的bug从我不爱做家务,不爱跟丈母娘拉家常这一点就已深埋下。那图图呢?想为图图做很多,但实际做得极少,对图图充满了愧疚,但没有任何实际行动。

对于工作,我有过经验,工作上的一团糟其实很容易解决,只要多花些时间,一些额外的工作日之外的时间去处理目前最重要的事情,熬过了,压力会骤减。生活上,只要我去洗碗,只要我去放下自己,生活会改善好多。但,这是全部吗?解决这些问题,需要我从本质上变成一个勤奋的人。但,我变成勤奋的人,我的生活会改善吗?

我不知道,或许,以此为起点会是个好的开始。拭目以待的吧。我愿意重构我的生活。

What Are You Work For

这篇什么都没有写,留下它,记录我自己——2013-7-28

提醒自己注意的事情

受触动,我觉得得认真想一想几件事情了。

  1. 将自己的兴趣转换为利益,做一个挣点小钱的android开发者。我是一条已经被证实了的道路,实践之。
  2. 做些和GIS相关的事情,我觉得有一些条件特别好,我已经逐渐有了些互联网的基因,试过做游戏,做过很多小东西,思路更加开阔。不太有技术上的盲区。而跟GIS结合,做相关的事情,我相信我会是一个最合适的人选。其他人或没有互联网基因,或没有hacker精神,不会用心琢磨这些小事情的。做些尝试挺好的。

自我救赎

今天的状态出奇的糟糕,原因可能是打了一天的dota,颇为不顺。总结出一点,自己的团队意识太过薄弱,也可能是因为思维惯性,老是把自己当成神灵,不管对方有几个人,直接冲上去,杀一个回本,杀两个白赚。很多时候队友颇为郁闷,说你一个后期(CK)老这么送哪行,把局势都断送了。也确实由于我的问题,导致明明可以赢的局势最后失利。打dota的时候往往如此,一旦局势不利,我的赌徒心理开始作祟,总是逮到对方一个落单的,我就直接上去,结果总是被对方反杀,导致局势更为不利。而我也确实开始明白团队对Dota的重要性。所以正是这样,我的情绪开始低落,因为发现自己的水平在一个怎样低下的位置。但话也说回来,我也发现自己在工作中也犯了同样的错误。很多时候总是赌徒心理在作祟。一旦不顺,便情绪低落到不行。我也明白要想解决这些问题,唯一的办法是进行自我救赎,看清局势,了解自己。尽量不犯错,一定不能犯低级的错误,只有这样也才能有机会赢得最后的胜利。

晚上回来,我便开始我这几年来的第一次洗衣服,这是我生活的自我救赎,而工作的自我救赎是什么呢?

戒Dota、微博一周。

另外对于dota,要不我从此以后不再打,要么我就成为高手。我已经难以接受目前的状态了。

明天刚好是欧洲杯决赛,虽然我是个伪球迷,但放在以往,我还是会看的,但这回我就不看了。因为工作的状态比一切都重要。更何况,接下来几个月是何其重要的时刻,我准备好了,不再是嘴上说说的。因为那就是我的自我救赎。

Facebook Menu的Android实现

这段时间一直再找类似path menu(不是圆形的那种)的android 实现,但是搜了一圈都没有。今天天放提醒,那个原来叫Facebook Menu,立马去搜,果然google第一页就有答案。但答案了有三个demo,我一一下载,测试。发现只有korovyansk/android-fb-like-slideout-navigation版本是我想要的。而另外就显得太简陋了,只是实现了滑动的效果,把menu的部分和内容的部分全都放在了一个Activiy里面。而我想要的是

  1. 符合Android UI结构的,即通过menu点击之后应该是切换到不同的activity,而不是切换view。
  2. Menu是独立的,不应该让我在每一个activity里面都加入menu的那一段东西。

于是便fork了korovyansk/android-fb-like-slideout-navigation代码,在他的基础上又添加了几个东西: 1. 支持包含titlebar的布局( Support titlebar layout ) 2. 支持多个activity切换 (Support multiple activities)

不多说,看图,看源码

源码地址

github:https://github.com/huangxiangdan/android-fb-like-slideout-navigation