恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

Mackerelで3分で始める簡単サーバー監視~apache,mysql,redisとか監視~

前回に引き続きMackerel的なアレを。


Mackerelで3分で始める簡単サーバー監視 - 恥知らずのウェブエンジニア

今回は監視対象にapache,mysqlなどのミドルウェアの状況を監視対象にしてみます。
手順は簡単でメジャーなミドルウェアであれば、公式のプラグインがあるので、
それをインストールして、ちょっぴり設定を修正するだけです。

公式プラグインインストール

まるっとyumでインストール

yum install mackerel-agent-plugins

ソースもgithubで公開されています。

mackerelio/mackerel-agent-plugins · GitHub

apache

mackerel-agent-plugins/README.md at master · mackerelio/mackerel-agent-plugins · GitHub
公式の通りにserver-statusにアクセスできるようapacheのconfを修正します。

Listen 1080
ExtendedStatus On
<VirtualHost 127.0.0.1:1080>
  <Location /server-status>
      SetHandler server-status
  </Location>
</VirtualHost>

/etc/mackerel-agent/mackerel-agent.confに下記のように追記します。
/usr/local/bin/mackerel-plugin-apache2 -p 1080を直接実行することで結果等も確認できます

[plugin.metrics.apache2]
command = "/usr/local/bin/mackerel-plugin-apache2 -p 1080"
type = "metric"

mysql

mackerel-agent-plugins/mackerel-plugin-mysql at master · mackerelio/mackerel-agent-plugins · GitHub
デフォルトだとrootで実行されるので、専用のユーザを一応作りました。

GRANT ALL PRIVILEGES ON *.* TO mackerel@localhost IDENTIFIED BY '****' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON *.* TO mackerel@127.0.0.1 IDENTIFIED BY '****' WITH GRANT OPTION

FLUSH PRIVILEGES

またまた/etc/mackerel-agent/mackerel-agent.confに下記のように追記します。

[plugin.metrics.mysql]
command = "/usr/local/bin/mackerel-plugin-mysql -username=mackerel  -password=****"
type = "metric"

redisとか

同じ要領で/etc/mackerel-agent/mackerel-agent.confに下記追記しました。というかコメントアウトを解除。

# Plugin for Linux
[plugin.metrics.linux]
command = "/usr/local/bin/mackerel-plugin-linux"

# Plugin for Redis
#   By default, the plugin accesses Redis on localhost.
#   Currently AUTH password has not been supported yet.
[plugin.metrics.redis]
command = "/usr/local/bin/mackerel-plugin-redis"


でこれらが終わったらmackerel-agentを再起動。

sudo /etc/init.d/mackerel-agent restart 

もし失敗した際は、/var/log/mackerel-agent.logを確認してください。
またApikeyがconfの下に書いてある場合は、上部に持ってくる必要があるみたいです。



これだけでリソースなど下記のようにグラフ化されます。
開発サーバーなので、動きがなくてアレですがちゃんとモニタリングできているようです。
f:id:ogataka50:20150222222501p:plain

f:id:ogataka50:20150222222526p:plain

なんて簡単・・・
ありがたいです。




感謝致します。
f:id:ogataka50:20150222223029j:plain

Mackerelで3分で始める簡単サーバー監視

会社などでは、サーバーの監視でzabbixやnagios、muninなどが使われているかと思いますが、
個人や小さいプロジェクトでは特にサーバー監視などしてないことも多いのはないでしょうか。

自分も個人のはサーバー監視していない状態でした。
特に必要が出たわけでもないのですが、Mackerelで簡単に監視できるそうなのでやってみました。

Mackerel(マカレル)とは

サーバーの監視やアラート、グラフ化をしてくれるサービスです

Mackerel: 新しいアプリケーションパフォーマンスマネジメント

手順

  1. Mackerel登録
  2. mackerel-agentをインストール
  3. サービスとかロールを設定

Mackerel登録

何はともあれ登録します。
普通に登録するだけです。
Mackerel: 新しいアプリケーションパフォーマンスマネジメント

mackerel-agentをインストール

監視対象のサーバーにmackerel-agentをインストールします。
mackerel-agentが定期的に諸々の情報をMackerelに送るようです。

スタートガイドのままです。

//リポジトル追加
curl -fsSL https://mackerel.io/assets/files/scripts/setup-yum.sh | sh
//yumでインストール
sudo yum install -y mackerel-agent

//設定ファイルにapikey追記
sudo sh << SCRIPT
cat >>/etc/mackerel-agent/mackerel-agent.conf <<'EOF';
apikey = "***********************"
EOF
SCRIPT

//agent起動
sudo /etc/init.d/mackerel-agent start

サービスとかロールを設定

サービスはそのままサービスやプロダクト単位のもを設定
ロールはwebとかdbなどサーバー単位の役割を登録します

そしてそれらをサーバーに紐付けます。


これだけで完了・・・

f:id:ogataka50:20150221221901p:plain
これだけで↑的な基本的なサーバーリソースの監視とアラートの設定等ができます。
会社的にやるとなるとセキュリティ的なアレですんなり行かないかもしれないですが、
個人の場合はありがたく使わせて頂きたいですね!


通知もメールやhipchat,slackにも送れるとのこと。
またプラグインを入れることでapachemysqlの監視もできる模様。
データをAPIに送ることで任意のデータの監視等も可能だそうです。

次はapache,mysqlの監視をしてみたいと思います。


監視といえばコレ

Denki Groove - Nothing Gonna Change [Berlin ...


感謝致します。
f:id:ogataka50:20150221222726j:plain

jenkinsでLDAP認証とジョブごとの権限設定

jenkinsは便利ですが、最初の「とりあえずやってみようぜ」的な流れのまま、
そこそこ危険なジョブも誰でも実行できたりと権限周りがアレな状態なので整理してみました。

なので、認証はLDAPを使い、LDAPのグループで大まかな権限設定行い、
細かいのはジョブごとに権限設定してみました。

バージョン

Jenkins 1.598
LDAP Plugin 1.11

LDAP認証設定

普通にGUIから設定

  • Jenkins -> Jenkinsの管理 -> グローバルセキュリティの設定
  • ユーザ情報 -> LDAPをチェック
  • LDAP情報設定
設定項目 内容
サーバー LDAPサーバー(必要あればポートも) 10.9.**.***
root DN 検索するroot dc=hoge_ldap
Group search base 検索対象のグループ ou=hoge_Group
Group search filter 検索グループフィルター cn=*_hoge

※最初は権限管理を「全員に許可」にしておいてから、LDAPログインできるか確認する。
もし設定に不備があると、ログインできなくなる可能性があります。
その場合、/var/lib/jenkins/config.xmlを直接修正する必要があります。

グループごとの権限設定

グループごとの権限設定は、Jenkins -> Jenkinsの管理 -> グローバルセキュリティの設定から行います

  • 権限管理 -> 行列による権限設定(プロジェクト単位)にチェックを入れる
  • 対象のグループごとに権限を設定(ここの設定でおおまかな設定を行い、後述のジョブごとの設定で細かい設定を行う)

ジョブごとの権限設定

  • 各ジョブの設定 -> 権限設定(プロジェクト単位)の有効化をチェックする
  • ここでジョブごとにグループの権限を設定します。

これで取り急ぎ、誰でも何でもできるとかjenkinsだけユーザ作るとかは必要なくなりそうです。


感謝致します。

f:id:ogataka50:20150217143251j:plain

logmonでログをリアルタイム監視

サービスを運用しているとどうしても不具合が出てしまいます。

出た不具合はできるだけ早く察知したいです。

ということでlogmonを使ってログをリアルタイムに監視して、
致命的なエラーが出たら、メールなりチャットなりで通知するようにしてみました。

概要

  • インストール
  • 設定ファイル作成
  • 起動

IBM Systems Director で利用できるログファイル監視用スクリプト - Japan
公式はこちらです

インストール

wget http://www-06.ibm.com/jp/linux/tech/doc/attachments/00057580_logmon_20100411.tgz
tar zxvf 00057580_logmon_20100411.tgz
cd logmon_20100411/


sh setup.sh

設定ファイル作成

今回はとりまapacheerror_logにFatal errorが出たら、通知します。

vi /etc/logmon/logmon.conf 

#監視対象ログファイル
:/var/log/httpd/error_log
#検索文字列
(.*Fatal.*)
#検索後の実行コメンド <%%%%>は検索した行
php ~/send_mail.php "<%%%%>"

起動

/etc/init.d/logmon start

#設定変更後は
/etc/init.d/logmon restart


なんて簡単!



感謝致します。
f:id:ogataka50:20150113193200j:plain

今年買ってよかったもの~2014~

なんか年末ということもあり、よく見るので自分も書いてみる。

THERMOS 真空断熱タンブラー2個セット シルバー 400ml

THERMOS 真空断熱タンブラー2個セット シルバー 400ml JMO-GP2

THERMOS 真空断熱タンブラー2個セット シルバー 400ml JMO-GP2

お酒はもちろんあったかいのも冷たいもの全部OK。
もう全ての飲み物はこれで飲んでます。
サイズ的にも缶ビール全部入りますし、洗うのも簡単なのでこのサイズでちょうど良かったです。

Raspberry Pi Type B 512MB

Raspberry Pi Type B 512MB

Raspberry Pi Type B 512MB

転職の間の暇つぶしで買ってみたのですが、色々勉強になりました。
電子工作とか全くやったことなかった自分としては、LEDを光らせただけでけっこう感動しました。
まだまだ使いこなせていないので、ネタ見つけて色々やってみたいです。

今は新しいモデルも出てます。

Raspberry Pi Model B+ (Plus)

Raspberry Pi Model B+ (Plus)

シュノーケルグッズ

Masks : M-212QB / Morbi|GEARカタログ|TUSA
Snorkels:SP-175 / PLATINA2 Hyperdry|GEARカタログ|TUSA
Fins : SF-5 / PLATINA Plus|GEARカタログ|TUSA

もともとはスキューバ用に買ったのですが、
やはりスキューバだと諸々費用なり、準備なりかかってしまうのであまり頻繁には行けそうにないです。
でもシュノーケルならさくっと行って潜れるので、来年の夏は伊豆とか行って潜りたいと思ってます。

Kindlle Fire

Fire HD 6タブレット 8GB、ブラック

Fire HD 6タブレット 8GB、ブラック


自分が買ったのはこれの一つ前のモデルですが、電子書籍見る用で買ってみました。
正直タブレットとして使うには色々難ありだと思うのですが、電子書籍専用なら十分だと思います。
これを購入してからはもはや、物理的な本を買う気がなくなっちゃいました。

スーパーソニックスクラバー

電動お掃除ブラシ スーパーソニックスクラバー本体セット

電動お掃除ブラシ スーパーソニックスクラバー本体セット

台所周りの掃除用に買ってみました。
けっこう音がうるさいし、宣伝動画みたいには、
きれいには取れませんが、洗剤とかと合わせれば十分油汚れが取れます。

この値段なら十分だと思います。

宇宙柄iPhoneケース


宇宙柄iPhoneケース | AKUTSU YURIE's SHOP

もう販売してないようです・・・
宇宙柄といい、「Why so serious?」といい、フォントといいかなり気に入っています。
酔っ払って落として割れたので2個目買いました。

家デスク用に買ったやーつ

BenQ 24型ワイドディスプレイ(5ms/フルHD/HDMI×1) GL2460HM

BenQ 24型ワイドディスプレイ(5ms/フルHD/HDMI×1) GL2460HM


VITTSJÖ ラップトップテーブル - IKEA

ディスプレイは特に写りにこだわりがないというか、
違いがわからない男なので、これで必要十分でした。

デスクはikeaのやつ。
あまりスペースがないので、コンパクトなやつは欲しかったのでこれにしました。
デザインもシンプルでいい感じ。
これの上にbenqのディスプレイ+mac bookと、mac miniとHDDを引き出し?的なとこに置いてます。


LENNART 引き出しユニット - IKEA
あと引き出しの下にこれがちょうどはまるので合わせてオススメです。




以上でーす。


感謝致します。

f:id:ogataka50:20141230224221j:plain

我が家を支えるChatOps

この記事はHubot Advent Calendar 2014 - Adventarの15日目です。

我が家でやり始めたchatopsのことを書こうと思います。

家族構成

  • 私、嫁の二人暮らし
  • 共働き
  • 私:めんどくさがり
  • 嫁:めんどくさがり

巻き起こる問題

  • どっちがゴミ捨てる問題
  • どっちが洗濯、掃除するか問題
  • どっちがシャンプーとか詰め替えるか問題

お互いめんどくさがりなので、
毎回、ギリギリまで耐えて相手にやらせようと戦っています

その結果

  • 貯まるゴミ、洗濯モノ・・・


これはイカン!

ということで、
家庭内問題解決のためChatOpsやってみました。

ゴミ出しBot作った

毎日夕方に明日出すゴミとその担当をチャットに流します。

f:id:ogataka50:20141215111852p:plain


って感じでゴミ出し当番を回すようにしています。
毎回この通りにやっているわけではないですが、以前よりはよくなったような。


ソースはこんな感じです。

persons = ['夫','嫁']
week = ["日","月","火","水","木","金","土"]
garbage_config = ["燃えるゴミ","ビン缶ペットボトル","燃えるゴミ","燃えないゴミ","燃えるゴミ","燃えるゴミ","燃えないゴミ"]


module.exports = (robot) ->

  #gabage
  new cron
    cronTime: "0 0 21 * * *"
    start: true
    timeZone: "Asia/Tokyo"
    onTick: ->
      now = new Date()
      target_day = now.getDay() + 1
      rand_num = (Math.floor(Math.random() * 100) + 1) % persons.length
      if target_day > week.length
        target_day = 0
      winner = persons[rand_num]
      robot.send {room: "xxxxxxx@conf.hipchat.com"}, "明日の#{week[target_day]}曜は#{garbage_config[target_day]}の日ですー!\n担当は#{winner}ですん"


チーム運用の改善に利用されるChatOpsですが、
今回は家庭運用に使ってみました。

家族も重要なチームと捉えれば色々改善できそうなとこありそうですね!


同じネタで社内LTをやったので、
その時のスライドも貼っておきます!






感謝致します。
f:id:ogataka50:20141214174743j:plain

hubot×hipchatでcron的な定期スクリプトをつくる

またまた前回に引き続きChatOps系を。
hubot×hipchatでJenkinsのジョブを実行する - 恥知らずのウェブエンジニア

今回はcron的な定期スクリプトをつくってみます。
朝10時になったら、朝会を通知してくれるようにしてみます。


さっそく。

必要モジュールインストール

cd BOT_DIR

npm install cron --save
npm install time --save

スクリプト作成

cd BOT_DIR
vi scripts/my_cron.coffee

cron = require('cron').CronJob
module.exports = (robot) ->
  robot.enter ->
  new cron
    cronTime: "0 58 9 * * 1-5"
    start: true
    timeZone: "Asia/Tokyo"
    onTick: ->
      robot.send {room: "xxxxxx_hoge@conf.hipchat.com"}, "朝会はーじまーるよー"

roomのところには発言させたいroomのXMPP JIDを指定します。
hipchatのroomsから確認できます。

スクリプト作成後、hubotを再起動します。

f:id:ogataka50:20141124193759p:plain


よさげです。
通知だけじゃなく、普通に定時処理とかもbot経由でやってみようと思います。




感謝致します。
f:id:ogataka50:20141124194255j:plain