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

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

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

hubot×hipchatでJenkinsのジョブを実行する

前回の続き

hubot×hipchatでChatOps的なアレ - 恥知らずのウェブエンジニア

今回はチャットからjenkinsのジョブを実行して、
結果をチャット上に出力するようにします。


まずはチャットからjenkinsのジョブを実行できるようにします。

チャットからjenkinsのジョブを実行する

どうやらデフォルトでjobを実行するscriptがあるようなのでそれを利用させてもらいます。

  • jenkins.coffee を有効にする
  • 環境設定設定

jenkins.coffee を有効にする

hubot-scripts.jsonにjenkins.coffeeを追記

cd BOT_DIR
vi hubot-scripts.json


[
  "jenkins.coffee"
]

こうすることで、
node_modules/hubot-scripts/src/scripts/jenkins.coffee
が有効になるようです。
src/scripts以下に他にもscriptがあるのでいろいろできそうです。
Hubot Script Catalog

環境変数設定

指定された環境変数を設定します。
起動script内に記述してもいいかも。

export HUBOT_JENKINS_URL="http://jenkins.hoge/"
export HUBOT_JENKINS_AUTH="username:password"


これだけでおkです!
さっそくhipchatからジョブを実行してみます。
コマンドは下記になります。

hubot jenkins list => ジョブリスト出力
hubot jenkins b <jobNumber> => ジョブ実行
hubot jenkins build <job> => ジョブ実行
hubot jenkins describe <job>  => ジョブ情報出力
hubot jenkins last <job>  => 最後のジョブ結果出力

f:id:ogataka50:20141123214600p:plain


よさげです。
でもこれだとジョブの結果がわからないので、
次はジョブ結果もチャットに出力するようにします。

ジョブ結果をチャットに出力する

こちらはhubotではなく、jenkinsから直接hipchatに通知を送るようにします。

流れは下記です。

  • [jenkins]hipchatプラグインをインストール
  • [hipchat]APIトークン生成
  • [jenkins]通知を送るように設定

[jenkins]hipchatプラグインをインストール

jenkins側でプラグインをインストールします。
jenkinsの管理 => プラグインの管理
からHipChat Pluginをインストールします。

[hipchat]APIトークン生成

次hipchat側でjenkinsがアクセスするためのトークンを生成します。
hipchatのページでGroup Admin => API => Create new token
でトークンを生成します。

f:id:ogataka50:20141123222706p:plain

[jenkins]通知を送るように設定

次はjenkins側で通知を送るように設定します。
jenkinsの管理 => システムの設定 => Global HipChat Notifier Settings
で先ほどのトークンと等を設定します。

また通知を送りたいジョブを個別で設定します。
ジョブの設定 => HipChat Notifications
で通知を送るroomとStart Notificationにチェックを入れます。
また、ビルド後の処理の追加から「HipChat Notifications」を追加します。

これで設定は完了です。

さっそくhipchatからジョブを実行してみます。

f:id:ogataka50:20141123223629p:plain



出力内容は要調整ですが、一旦できたっぽいです!
ちょっとずつChatOps感出てきました!



感謝致します。

f:id:ogataka50:20141017160631j:plain

Raspberry PiでLED点灯させてみる

なんかアレなのでこちらの商品買ってみました。


Amazon.co.jp: ハック ラズベリーパイ Raspberry Pi 電子工作入門キット。: パソコン・周辺機器


さっそくLEDを点灯させてみました。

同封されていた説明所にある通り下記のサイトを参考に進めてみました。


Raspberry PiでLED点灯(Lチカ)してみよう。 - Raspberry Pi 電子工作


手順通りやったらLEDぴかぴかできました。

その際のちょっとメモ。

  • 抵抗をちゃんと計算しないとLEDが割れる><
  • GPIOはここを参考に

The Pi4J Project - Control Example


進める毎に更新していくやーつ



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

hubot×hipchatでChatOps的なアレ

最近よく聞くChatOps

chatのbotを利用して色々なオペレーションを自動化するワークフローで、
githubがやりはじめたってやつです

chatopsとはなんぞや的なことは下記を一読

ChatOps at GitHub // Speaker Deck

ちょっと思うとこがありやってみました。

hhubot側の設定

hubotインストール

まずはインストール。
node,redisが必要なのでない場合はインストールしてください。
以前はhubotをnpmでインストールしたような気がするのですが、
現在は下記でインストールできるようです。
hubot/docs at master · github/hubot · GitHub

npm install -g yo generator-hubot

nodeのバージョンが低いとインストールできませんでした。
自分はv0.10.26にすることでインストールできました。

bot作成、起動、確認

さっそくbotを作成と起動。
redisも起動しておいてください。

mkdir myhubot
cd myhubot
yo hubot

./bin/hubot

Hubot> hubot ping
Hubot> PONG
Hubot> hubot pug me
Hubot> http://27.media.tumblr.com/tumblr_lsvlcmTElk1r1z2mqo1_500.jpg

起動後,pingなど打つとbotから返答があります。
これで一旦hubot側の設定はできました。

hipchat側の設定

次はhipchatの内容をhubotが受け取れるようにしていきます。

hipchatアカウント作成

なにはともあれhipchatのアカウントをつくりましよう。
自分とbot用のアカウントを作成します。
プライベートグループチャットと IM サービス | Atlassian HipChat (アトラシアン ヒップチャット)

Jabber ID取得

上でつくったbotが反応できるようにするにはJabber IDなるものが必要だそうです。
下記からメモります。
https://username.hipchat.com/account/xmpp

hipchatアダプターインストール

hipchatの内容を受け取れるようにアダプターをインストール

npm install hubot-hipchat --save

hipchat用環境変数設定

下記のようにhipchat用の環境変数の設定が必要ありだそうです。

export HUBOT_HIPCHAT_JID="hogehoge@chat.hipchat.com"
export HUBOT_HIPCHAT_PASSWORD="xxxxxxxxxx"

アダプタ設定してのhipchat起動

  • aでアダプタ設定するとのこと
cd ~/test_bot
bin/hubot -a hipchat

問題なければhipchatからpingやってみます。
f:id:ogataka50:20141119004641p:plain

イケマシタ。

ついでに新しいscript作ってみます。
対象のbotディレクトリのscriptの下に作成します。

cd myhubot
vi scripts/hello.coffee

module.exports = (robot) ->
    robot.hear /hello/i, (msg) ->
    msg.send 'hello!!!'

coffeescriptで書きます。
botがhelloという文言を受け取るとhello!!!と返します。

作成したscriptを反映させるためには、botを再起動する必要があるみたいです。

f:id:ogataka50:20141119005355p:plain

robot.hearなので@をつけなくても反応します。


こんな感じでscriptを作成していって、自動化してけばよさそうです。




感謝致します。

f:id:ogataka50:20141119005613j:plain