読者です 読者をやめる 読者になる 読者になる

Naba Blog

プログラミングとか作曲など色々

Linuxサーバーで現在のCPU利用率をTweetする

まえがき

先日、レンタルサーバーを借りたのですが、折角なのでWebサーバーだけじゃなくてTwitterのbotとか作ってみようと思いまして。

で、サーバーの情報をツイートしてみようとしたわけです。
今回は、試験的に現在のCPU使用率(全CPUの平均)をツイートしてみます

 

環境

  • Ubuntu 14.04 LTS 64bit
  • Twitterアカウントを持っている

 

流れ

ツイートするまでの流れです。

  1. Ubuntuに必要なものをインストールする
  2. Twitter devにアプリを登録する
  3. コードを書く
  4. crontabに登録する
  5. 終わり

 

参考

 

1.Ubuntuに必要なものをインストールする

今回インストールしたものは、以下です。 * Ruby-1.9.1 / Ruby-1.9.1-dev / Ruby-1.9.1-build (buildは要らなかったかも?) * Ruby Twitter Gem (RubyのTwitterライブラリ) * sysstat (cpu使用率を出す)

まずはRuby関連インストールします。

sudo apt-get install ruby ruby-dev ruby-build

2015/01/13現在、rubyでインストールすればバージョン1.9.1が入るようです。
今回は、このバージョンで問題ありませんでした。

後で触れますが、私のUbuntuではデフォルトでシェルのmakeコマンドすらない?状態だったのでbuildパッケージも入れましたが、makeが出来ればbuildパッケージは入れる必要はないかと思います。

 

次に、GemからRuby Twitter Gemをインストールします。ここも管理者権限が必要です。

sudo gem install twitter --no-ri --no-rdoc

エラーが出なければ成功です。

自分の場合は、まず'require': cannot load such file -- mkmf (LoadError)とエラーが出たのでruby-devを入れ、次にmakeコマンドが見つからないよってshellから怒られたのでruby-buildを入れ、ようやくインストール成功しました。

 

後は、CPU使用率を調べるためにmpstatコマンドを使いたいので以下をインストール

sudo apt-get install sysstat

 

2.Twitter devにアプリを登録する

サーバーからツイートするには、そのツイートシステムを一つのアプリとして登録する必要があります。

まず、Twitterにログインした状態で https://apps.twitter.com/app/new にアクセスします。

  • Name : viaで表示される名前、日本語も使えます。
  • Description : アプリの説明です。今回は自分しかこのアプリを使用しないのでぶっちゃけなんでもいいです。
  • Website : アプリ名をクリックした時に飛ぶURLです。無い場合はなんでもいいです。
  • Callback URL : 空でいいです。

あとは Yes, I agree にチェックを入れたら下の Create your Twitter application をクリックしましょう。

 

そうすると、アプリの登録が完了するので、まず上のタブの Permissions をクリック。
アプリが許可する動作を設定できます。

デフォルトでは読み込むことしかできません。
今回は、ツイートさせたいので2番目の Read and Write にチェックを入れて Update Setting しましょう。

 

次に、Keys and Access Tokens をクリック。
Application Settings の中の Consumer Key (API Key)Consumer Secret (API Secret)をメモします。

次に、下の Your Access Token の Create my access token をクリック。
そうすると、Access TokenAccess Token Secret が出て来るので同じくメモ。

以上です。

 

3.コードを書く。

準備が出来たので、Rubyのコードを書きましょう。

どこでも良いですが、管理しやすい場所にソースファイルを作ります。

名前は、twitter-system-bot.rbとしておきます。

mkdir ~/ruby
vim ~/ruby/twitter-system-bot.rb
# encoding: utf-8

require 'twitter'
require 'pp'

value = '[my Server] '
value << `echo ""`
value << `date +"%Y年%m月%d日%H時%M分 " | tr -d '\n'`
value << '現在のCPU使用率は '
value << `mpstat | sed -n '4,4p' | awk '{ print $4 }' | tr -d '\n'`
value << '% です。'
value << `echo ""`
value << '(現在試験的に3時間毎の自動ツイートをしています)'

client = Twitter::REST::Client.new do |config|
  config.consumer_key = 'consumer_key'
  config.consumer_secret = 'consumer_secret'
  config.access_token = 'access_token'
  config.access_token_secret = 'access_token_secret'
end

client.update(value)

 

# encoding: utf-8

これを書かないと、日本語を含むツイートをする際にエラーを吐かれます(ruby-2.0.0以降は書かなくても大丈夫らしい)。

value << `date +"%Y年%m月%d日%H時%M分 " | tr -d '\n'`

この行で、日付をフォーマットして出力しています。
最後に tr -d '\n' しないと、日付の後に改行が入ってしまいます。

value << `mpstat | sed -n '4,4p' | awk '{ print $4 }' | tr -d '\n'`

この行で、CPU使用率の数字だけを取り出しています。

まず、mpstatの結果が

Linux 3.13.0-43-generic (domain) 01/13/2015 _x86_64_ (3 CPU)

02:49:09 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:49:09 AM all 0.21 0.00 0.05 0.06 0.00 0.00 0.00 0.00 0.00 99.69

であるので、 sed -n '4,4p'で4行目だけを取り出し、
awk '{ print $4 }'で左から4番目のカラム(%usr)を取り出し、
tr -d '\n'で最後に入る改行を消します。

 

Twitterの設定は、先ほどメモした値をクォーテーション内に貼り付けます。

consumer_key には Consumer Key (API Key) を、
consumer_secret には Consumer Secret (API Secret) を、
access_token には Access Token を、
access_token_secret には Access Token Secret を、それぞれ入力します。

ここまで出来れば、ruby ./twitter-system-bot.rbを実行すればツイートされると思います。

 

4.crontabに登録する。

ツイート出来る事が分かったので、最後に、botとして定期的に自動でツイートされるようにcrontabに登録しましょう。

巷では、crontab -ecrontab -r (crontabの設定を確認なしで全削除)とキーが近いから辞めた方がいいとありますが、自分は気にしないので普通に編集しちゃいます。

 

crontab -e

書き方は、英語でも書いてあるので読みましょう。(ググれば出てくるけど)

今回は、毎日休まず3時間毎の15分にツイートさせたいので、

15 0-23/3 * * * ruby /home/user/ruby/twitter-system-bot.rb

と書いて保存して終了です。

f:id:naba0123:20151012095822p:plain

 

5.終わり

お疲れ様でした。

調べながらやったので、ここに書いてあることをそのまま実行してエラー出たりしても責任は取れません、ごめんなさい。

良いサーバーライフを(?