Quantcast
Channel: ADACHIN SERVER LABO
Viewing all 164 articles
Browse latest View live

[Zabbix]ip_conntrackの概要と監視追加

$
0
0

Hai Adachinです。

だいぶ前にzabbixip_conntrackを監視しようと思ったらかなりハマったのでブログします。

よくハマるんですけどね(´・ω・`)

ip_conntrack

そもそもip_conntrackってなあにから説明しようと思います。


ip_conntrackとは

パケットを解析するときにip_conntrackというファイルにトラッキング情報を記録します。
その元がiptablesなんです。
ip_conntrackには、最大トラッキング数があり、オーバーすると新規セッションを弾いてしまって、ネットワークパフォーマンスの劣化を招いてしまいます。
そのために!チューニングしないといけないんですね!

(例)

・/var/log/message

ip_conntrack: table full, dropping packet  #表示されてたら溢れてるということ!

つまり、大量のトラフィックを捌くロードバランサーやキャッシュなどの目的を持った
Linuxマシンには必ず設定をしないといけません!


■監視設定

今回は各ip_conntrackをチューニング(設定)した場合で監視追加します。

流れ的には以下のようにします。

  1. サーバOSのバージョンを確認

  2. ip_conntrackファイルの確認/zabbix-agent再起動

  3. zabbix用ip_conntrackテンプレートの確認

  4. zabbix監視追加/グラフ出てるか確認

以上!

今回ハマったのは2,3だけなので、これが理解出来ていれば監視も簡単にうまくいくと思います。


[2.ip_conntrackファイルの確認/zabbix-agent再起動]

実はCentOS6系と5系のディレクトリとファイル名が違うので注意しましょう。

# cat /etc/zabbix/zabbix_agentd.conf
※confファイルにip_conntrackファイルを指定します。(適宜変更してください)
#centos6 
UserParameter=ip_conntrack_count,cat /proc/sys/net/netfilter/nf_conntrack_count
UserParameter=ip_conntrack_max,cat /proc/sys/net/netfilter/nf_conntrack_max 
#centos5 
UserParameter=ip_conntrack_count,cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count 
UserParameter=ip_conntrack_max,cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max

 [3.zabbix用ip_contrackテンプレートの確認]

#centos6
zabbixのデフォルトテンプレートにあるはず・・

#centos5
http://sq4ind.eu/zabbix_ip_conntrack.xml


■まとめ

Centosのバージョンのせいでまったく監視できなかった・・

しかもテンプレートもCentos6のモノを使ってもまったく監視できなくてさらに時間かかった。

みなさんも注意しましょう。

参考:独学


[zabbix]slackと連携してみたよっ!

$
0
0

Hai ZabbixマスターになりかけのAdachinです。

今までチャット系ツールはアトラシアンのhipchatを使用していたんですが、

slackに移行するぞ!となったので頑張って連携してみました!

zabbixslack

とりあえず、slackはAPIが豊富で、UIもかわいいし、やはり最強チャットツールに任命!

hipchatはよくサポートから落ちてるからゴメンナサイメールが来るのでなんとかしてほしいですね!(´・ω・`)

それ以外はBitbucketとかあるし、どっちでも良さそうですw

とりあえずどうやって連携しているか他のサイト見ても細かく書いていなかったので、

よくわからん人でもこのブログで分かった!となってくれれば幸いでございます。


■まずはincoming hookを取得

https://my.slack.com/services/new/incoming-webhook

上記のURLをアクセスする前にAlert系のgroupを作ってください。

そしてURLをアクセスしたら使用するgroupを選択し、Your Unique Webhook URLをメモします。

こんなやつ。

https://hooks.slack.com/services/HAHA/WHOHO/HEHEHE

slackでの作業はオシマイです。


■Zabbixサーバにてスクリプトファイルの設置

ZabbixのAlertScriptPathを/etc/zabbix/zabbix_server.confから確認します。

# grep AlertScriptsPath /etc/zabbix/zabbix_server.conf
### Option: AlertScriptsPath
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
# cd /usr/lib/zabbix/alertscripts
# wget https://raw.githubusercontent.com/ericoc/zabbix-slack-alertscript/master/slack.sh
# chmod 755 slack.sh

これでOKです。


■Zabbixの設定

・メディアタイプの設定

管理 -> メディアタイプ -> メディアタイプの作成

下記の画像のように登録してください。

z01

・slackユーザ作成

管理 -> ユーザ -> ユーザの作成

名前 Slack
メディア -> 新規メディア >#Alertグループ名
タイプ Slack
グループ Zabbix Administrator

・アクションの設定

設定 -> アクション -> アクションの作成

下記の画像のように設定してください。

リカバリメッセージ チェックオン

・アクションの実行条件

トリガーの値に障害と正常を追加します。

アクションの実行内容はターゲットリストをリストを現在のホストに、コマンドは下記のようにします。

テストしたい場合は下記のコマンドを打って確認してください。

/usr/lib/zabbix/alertscripts/slack.sh '@alertgroup名' "{TRIGGER.STATUS}" "{TRIGGER.NAME}-{ITEM.VALUE1}"

z02

z03

z004

以上!!テストコマンドで確認してみましょう!(上記のやつ)


■slack.shについて

デフォルトのスクリプトだとかなり使いにくいし、見にくいので実行するとこんな感じで出ると思います。

z05

改行もしたいし、色も付けたいし、Downの場合は絵文字で見やすくしたり、自分なりに工夫して作ってみました。

基本webシナリオのものをslackに通知させてます。

で、こんな感じにしました。

よかったら参考にしてください!https://github.com/RVIRUS0817/adachin_git/blob/master/zabbix/slack/slack.sh

slackres


■まとめ

時間があったらこのスクリプトをいろいろ改良したいですね。
ロアベ上がったらグラフをslackに通知とかなどなど。。
redmineもslackに通知などなど。。
次回はslackでnagios通知をブログします。

参考:https://github.com/ericoc/zabbix-slack-alertscript

SSL証明書と秘密鍵keyの合致確認をスクリプト化してみた

$
0
0

Hai Adachinです。

最近スクリプト化できそうなものは自分で考えてリスクを減らしています。

programing01

 

とくに手作業だと毎回慎重になり、なにかとミスをしそうなので、

エンジニアならばなんでも自動化しちゃえ!という方向へ・・・

今回はSSL証明書と秘密鍵keyの合致確認ですね。

必ずSSL更新する場合は一度合致確認をしてapache系を再起動するようにしてます。

さらさらっと書いたのでもっと簡単にスクリプト化できるかも・・
今まではこんな感じで手作業でした。


■今までの場合

# /usr/bin/openssl x509 -in hoge.crt -modulus -noout > CRT.txt 
# /usr/bin/openssl rsa -in hoge.key -modulus -noout > KEY.txt 
# diff CRT.txt KEY.txt
↑なにもエラーでなかったらOK
# rm CRT.txt KEY.txt

この作業をスクリプト化してみます。


■スクリプト内容


■スクリプト起動方法

$ chmod 755 diffcsrkey.sh
$ ./diffcsrkey.sh  -c hoge.crt -k hoge.key
合致してる場合は何も出ない
$ ./diffcsrkey.sh  -c hoge.crt -k hogehoge.key
unable to load Private Key
139743238453064:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:818:
合致していない場合はこのようにエラーが出る。
そもそも違ってたら大変ですw

■まとめ

これで毎回crtとkeyを指定すれば簡単に合致確認できるようになったし、
手間が省けますね。

もっとこのスクリプト簡単に書ける方法があれば教えてください!

参考:自力

 

[linux]sedコマンドを駆使して作業を楽にする

$
0
0

Hai Adachinです。

定例作業とか毎回vimで編集して削除、みたいなことをしていたんですが、

これだとサーバ台数増える一方になるとやたらめんどくさい。

chefでやろうと思ったけどリスクがありそうだし、

ミスもしたくないのでsedコマンドを使用して作業を楽にしてます。

sed

今回はよく使うsedコマンドをブログしときます。


■文字列を削除

# sed -i 's/文字列//g' hoge.txt

■文字列を含む行を削除

# sed -i '/文字列/d' hoge.txt

設定ファイルの特定の行とか削除できて楽ちんです。


対象文字列を置換文字列に置換

# sed -i 's/対象の文字列/置換後の文字列/g' hoge.txt

設定ファイルの値をコメントアウトしたり、コメントアウトを外すときにかなり重宝します。


■まとめ

そういえばsedコマンドのオプションで「-e」「-i」が両方とも削除、

みたいなのをネットでよく見かけるんですが、

-eは削除されたものが標準出力に出力してるだけで実際には反映しておらず、

-iは直接削除するという認識でOKだったと思います。

ちゃんとローカルでテストしてから実際にコマンド叩きましょう。

これでサーバ何台あってもコピペで済むようになったしミスもないから一件落着。

参考:http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/

[ruby][rbenv]System Wide Installで全ユーザーに使えるようにする

$
0
0

Hai Adachinです。

今日、検証用サーバに「rubyが入ってないよ(#^ω^)Adachinゴラッ!」と言われたので、

homepage_rbenv

ふぁっ!?そんな馬鹿な。。と脳内がフル回転し、確かに

今まで各ユーザごとにインストールしてました。。(以前書いたブログより)

これだと全ユーザーに最新のrubyが入ってないよとまた言われてしまうので、なんとかならんのかねと

ググったところ、System Wide installというやり方を見つけたのでブログしやす。(rbenvで)


■今までのrbenvでのrubyインストール

/home/adachin/.rbenv

多分こんな感じであると思いますが、他のユーザがrubyを使いたいと思っても使えないのが悩みどころ。

System Wide installという方法ではrootに対してrbenvをインストールして、どのユーザでもrbenvが使えるようにするそうです。

やってみたよ!!!


■rbenv,ruby-bulidを/usr/localにインストール

・ rbenv
$ sudo git clone git://github.com/sstephenson/rbenv.git /usr/local/rbenv
・ ruby-build
$ sudo git clone git://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build

■visudoでパスの変更

$ sudo visudo
# /etc/sudoers
# Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin #コメントアウト
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims
Defaults env_keep += "RBENV_ROOT"

これによりsudoがrbenvやgemコマンドを指定するようにしてます。


■rbenvの使用準備

$ sudo rbenv init -
$ sudo vim /etc/profile
export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

これを追記することで

どのユーザーにもrbenvが/user/local/rbenvにありますよとなるわけです。


■読み込み

$ source /etc/profile

これでエラーが出たらrootになってから実行するといいかも

$ sudo -s
# source /etc/profile

■ruby 2.2.2をインストールしてみる

# sudo rbenv install 2.2.2
# sudo rbenv global 2.2.2

必ずsudoを付けてインストールしましょう。rootのみがrbenvを更新することができるからです。


■確認

[adachin@test ~]$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]

大丈夫そうですね!他のユーザで確認したいときは

source /etc/profileをすればruby 2.2.2が使えると思います。


■まとめ

もちろんgemでbundlerをインストールしてみると全ユーザーでbundlerが使えると思います。

これでみんなruby使えるね!(・∀・)

参考:http://d.hatena.ne.jp/komiyak/20150603/1433364444

[rsync]lsyncdでミラーリングせよ!

$
0
0

Hai Adachinです。

(検証用サーバのネタです)

今回はlsyncdでミラーリングする方法をブログします。

とりあえずこんな図を作ってみました。

lsyncd設定

今までHTTPサーバまでファイルを移動するときに、

毎回ローカルから踏み台へ移動し、HTTPサーバへ移動するというなんとも

メンドクさいからAdachinなんとかしてくれとのことで、lsyncdでミラーリングすればいいんじゃないか。

となったので設定してみました。


■lsyncdとは

Live SYNCing (Mirror) Daemon の略だそうで、まさに同期プログラム(ミラーリング)です。

rsyncは転送するためのコマンドです。


■インストール

[ミラーリング元]踏み台

・RPMForgeリポジトリが無い場合。CentOS6 x86_64用

$ sudo yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

・lsyncd, rsyncインストール

$ sudo yum install lsyncd rsync

[ミラーリング先]HTTPサーバ

・rsyncインストール

$ sudo yum install rsync

※rootユーザでsshできるか確認しましょう!


■設定

[ミラーリング元]

・ミラーリング対象のディレクトリ作成

$ mkdir /home/adachin/test

・設定ファイルを作成

$ sudo vim /etc/lsyncd.conf
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings {
 logfile = "/var/log/lsyncd.log",
 statusFile = "/tmp/lsyncd.stat",
 statusInterval = 1,
 maxProcesses = 2,
 nodaemon = false,
 insist = 1,
 delay = 3,
}
sync{
 default.rsync,
 source="/home/adachin/test",
target="root@192.168.xx.xx:/home/adachin/test",
  rsync = {
    owner = true,
    group = true,
     _extra = { "-a" }
 }
}

■lsyncd起動時のオプション設定ファイル修正などなど

$ sudo vim /etc/sysconfig/lsyncd
LSYNCD_OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf"
$ sudo vim /etc/init.d/lsyncd
source /etc/sysconfig/lsyncd

■ミラーリング先の設定

・ミラーリング用ディレクトリ作成

$ mkdir /home/adachin/test

・ rsyncd.confファイルの作成

$ sudo vim /etc/rsyncd.conf
uid = root
gid = root
read only = no
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[adachin]
path = /home/adachin/test
hosts allow = localhost 192.168.xx.0/24
hosts deny = *
read only = false

・デーモンとして起動

$ sudo /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

■ミラーリング元にてlsyncd起動/確認

・lsyncd起動

$ sudo /etc/init.d/lsyncd start

・テストファイル作成

$ touch /home/adachin/test/test

・lsyncdのログを確認

$ tail -f /var/log/lsyncd.log
Thu Dec  3 20:36:31 2015 Normal: Calling rsync with filter-list of new/modified files/dirs
/test
/
Thu Dec  3 20:36:31 2015 Normal: Finished a list after exitcode: 0

[ミラーリング先]HTTPサーバ

・ ファイルができているか確認

$ ls /home/adachin/test/
test

■まとめ

複数のディレクトリ指定する場合はsync{}で同じ用に囲っちゃえばOK

ハマったのはrootユーザでsshができるようにすること。

ミラーリング先のsshd.configrootユーザでもsshできるオンをすればダイジョーブ

参考:http://qiita.com/ftakao2007/items/41c5c0653892d1454c39

[ディスク]LVMについてまとめてみた

$
0
0

Hai Adachinです。

サーバディスクが壊れたり、

ちゃんと情報が共有されてなかったり、

実際ディスクの構成とかどうなっているのか調べるために、

LVM (Logical Volume Manager:論理ボリュームマネージャ)というものがデフォルトで設定されてます。

ちなみにこれを利用するとどんなメリットがあるのか!?

lvm


■メリット

・複数のHDDをまとめて一つのファイルシステムにできる

・ディスクの詳細が分かる

・パーティションサイズの変更ができる

・snapshot機能ができる

AWSだとEBSボリュームなどなど。


■LVMの情報を見てみる

# fdisk -l /dev/sda
Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス  Boot      Start       End      Blocks   Id   System
/dev/sda1 *         1           13       104391   83   Linux
/dev/sda2           14         30401   244091610  8e   Linux LVM

fdiskコマンドで現在のパーティションを確認することができます。
LVM使ってるのは/dev/sda2ですね。

# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
省略だyo

mountコマンドを実行すると現在のマウントされているのが分かりますね。
ext3だ・・とか。

# cat /proc/swaps
Filename                        Type      Size    Used Priority
/dev/mapper/VolGroup00-LogVol01 partition 2031608 0    -1

swapパーティションこいつだ・・・とか

# pvdisplay
 --- Physical volume ---
  PV Name               /dev/sda2           
  VG Name               VolGroup00          
  PV Size               232.78 GB / not usable 2.71 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              7449
  Free PE               1
  Allocated PE          7448
  PV UUID               AxeFE1-UlR1-npd9-TnIi-fl3Q-fv3A-e2Mlu3

物理的ボリュームを表示したいときはpvdisplayコマンドを使います。
全部でこんな容量なのか・・・とか

# vgdisplay
 --- Volume group ---
  VG Name               VolGroup00           
  System ID
  Format                lvm2
  Metadata Areas        1 
  Metadata Sequence No  3
VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               232.78 GB
  PE Size               32.00 MB
  Total PE              7449
  Alloc PE / Size       7448 / 232.75 GB
  Free PE / Size        1 / 32.00 MB
  VG UUID               pdphtf-3rKe-QO5v-zuw4-5q88-hDeN-uLVlym

ボリュームグループを表示したいときはvgdisplayコマンド。
仮想記憶装置とかで複数の物理ボリュームを一つの大きなHDDに認識します。

# lvdisplay
--- Logical volume ---
  LV Name               /dev/VolGroup00/LogVol00     ←LVの名前
  VG Name               VolGroup00
  LV UUID               m2sx31-yglu-wjsG-yqq0-WPPn-3grk-n2LJBD
  LV Write Access       read/write
  LV Status             available
  # open                1
  LV Size               230.81 GB
  Current LE            7386
  Segments              1
  Allocation            inherit
  Read ahead sectors    0
  Block device          253:0
  --- Logical volume ---
  LV Name               /dev/VolGroup00/LogVol01     ←LVの名前
  VG Name               VolGroup00
  LV UUID               VR4EHJ-mpxW-uadd-CpTX-lEyz-2OEU-0TyYDn
  LV Write Access       read/write
  LV Status             available
  # open                1
  LV Size               1.94 GB
  Current LE            62
  Segments              1
  Allocation            inherit
  Read ahead sectors    0
  Block device          253:1

論理ボリュームを表示させたいときはlvdisplayコマンド。
仮想的なパーティションですね。
こうなっているのかあ・・・などなど。

# export LD_LIBRARY_PATH=/usr/StorMan
# /usr/StorMan/arcconf GETCONFIG 1 LD
RAID level                               : 10

RAID構成の確認


■まとめ

ディスク系はこれで確認ができるので覚えておくと便利ですね。
しかしlinuxは深い。。。・3・
※LVMの情報は適当でございます。

参考:http://h50146.www5.hp.com/products/software/oe/hpux/developer/column/beg_integrity_10/

[hubot]docomo雑談対話APIが笑ったから導入の仕方まで

$
0
0

hai Adachinです。

最近社内でhubot × slackを使って、社内のコミュニケーションを取りやすくするために盛り上げてます。

そもそもhubotとは何なのか、から雑談対話APIを導入するまで、ブログしていきたいと思います。

hubot


■HUBOTとは

GitHub社が開発したチャットbot開発・実行フレームワークで、
開発フローに組み込むことで開発を楽にすることができます。
本来の使い方はそんな感じなんですが、せっかくなのでbotくんとコミュニケーション取りたいなと思い、
docomo 雑談対話APIを使ってみました。

まずはhubotの環境構築から説明します。


■インストールする前に

slack側でhubotの設定をしましょう

1. slack hubotのapiを作成

https://slack.com/apps/search?q=hubot

アクセスしたら以下のように画面が出るのでトークンキーなど確認しましょう

h01

h02

トークンキーはあとで使うのでメモしときましょう。saveしたらhubotの構築です。


■hubotのインストール

1. まさかの二行でインストール

#sudo yum install nodejs redis npm --enablerepo=epel
#sudo npm install -g coffee-script hubot yo generator-hubot

結局何をインストールしているのか

・hubotの本体
・命令を書くためのcoffee-script
・bot作成の作業を簡略化してくれるyeoman
・yeomanが利用するbot作成ジェネレータ generator-hubot

2. yoコマンドでbot作成だyo

#mkdir adabot
#cd adabot
#yo hubot
#Owner: adachin@adachin.com
#Bot name:adabot
#Description:エンター
#Bot adapter:slack

ちゃんと適宜変更してくださいね。今回はadapterはslackです。

3. 起動スクリプトの作成

# vim slack.sh
#!/bin/sh
export HUBOT_SLACK_TOKEN=トークンキー
./bin/hubot --adapter slack
# chmod 755 slack.sh

4. hubotの起動

./slack.sh

5. slackチャンネルにhubotを追加する

好きなチャンネルにhubotユーザを追加して上げてください!
テストとしてpingと打ってみてください。
できたら雑談対話apiを導入しましょう!!


■docomo雑談対話APIの登録~設定まで

1.API取得

https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=dialogue&p_name=api_usage_scenario

登録は無料なので、適当に新規でAPIを発行しましょう。
ポチポチとな。

2. APIをslack.shに追加する

# vim slack.sh
export DOCOMO_API_KEY=キー

どこでもいいので追加します

3. hubot-docomo-dialogue

$ npm install https://github.com/bouzuya/hubot-docomo-dialogue/archive/master.tar.gz
$ cat external-scripts.json |grep hubot-docomo-dialogue
 "hubot-docomo-dialogue", →なかったら追加してください

4.scriptsディレクトリにてcoffeeスクリプトを設置

# cd ~/adabot/scripts
# vim docomoapi.coffee

5.hubotの再起動

ctl + c 
# ./slack.sh

6.コミュニケーションを取ってみる

チャンネルの場合はちゃんと@付けてお話してくださいね。

h04


■まとめ

hubotはなかなかおもしろい。。。
他にもデプロイあと何分で終わるよーとか
ランチ勝手に決めてもらったりなどなど。
なんか作ったらブログします−3−

参考:http://bitwave.showcase-tv.com/slack%E3%81%A8%E9%80%A3%E6%90%BA%E3%81%99%E3%82%8Bhubot%E3%82%923%E5%88%86%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/


[shell script]リモート先ファイルを確認する

$
0
0

あけましておめでとうございます!!

Adachinです。

今年初のブログです!

(⌍་д་⌌)「二週間何してたの??」

書く時間がありませんでした(言い訳乙)

というわけで、今回はシェルスクリプトのお話。

目的としてはリモート先のファイルを毎時確認したいからどうすればいいか作ってみた。

shell


■流れ

①if,else文でファイルがない場合はslackとメールに飛ばす

②ある場合は特に何もしない

とりあえず、リモート先のファイルを確認ってどうやるのか本などで調べてみた。


■if文

if [[ `ssh adachin@server "ls $test"` != "$test" ]]; then

-f 関数がリモートでエラー吐きまくったのでこんなかんじにしてみた。
[ ]の内側は必ず半角スペースを入れることに注意しましょう。


■例文

例えばlsyncdでコンテンツファイルを各サーバに同期させる場合、
ちゃんと同期しているのかを確認するスクリプトを紹介します(・∀・)

というわけでこんな感じで作ってみました。


■まとめ

自動化した時の快感は半端無かった・・・
他にやり方などあったらコメントお願いします!!!
来週からAWSでサーバ構築をするのでそこらへんもあとでブログします。

参考本:http://goo.gl/trhRYJ

[AWS]EBSでボリュームをマウントする!慎重に!

$
0
0

Hai Adachinです。

久しぶりにちゃんとAWSを使うことになりまして、

去年はオンプレがメインだったので今年はたくさんのクラウドサービスに触れることができそうです!

e0

というわけで今回はEBS(Amazon Elastic Block Store)についてです。

簡単に言うとディスク追加ですね。簡単にボリューム増やしたりなどなど。。

基本ハードディスクのマウント作業とかすんごい怖いというか・・・チビる・・・

そんなことないようにブログします。


■AWSコンソールで確認

今回は30GBを/dataにマウントします。

以下の画像の通りアタッチしてマウント出来ていればOKです!

e01


■サーバにてマウント作業

さあここからですが、慎重に作業をしましょう。僕はawsの公式サイトを見てやりましたので、
もっと簡単に説明します。

・とりあえず対象のサーバにログイン

[ec2-user ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 30G 0 disk / →こいつ

上記のコマンドで現時点のディスクがどうなっているのか確認ができます。まだ「/」になってますね。
これを/dataにするのです。

・ファイルシステムを作成できるのか確認する

[ec2-user ~]$ sudo file -s /dev/xvdb
/dev/xvdb: data

上記の表示だとまだなんもデータ入っていないよなので、マウントされてると以下のような感じになります。

[ec2-user ~]$ sudo file -s /dev/xvda1
/dev/xvda1: Linux rev 1.0 ext4 filesystem data, UUID=1701d228-e1bd-4094-a14c-8c64d6819362 (needs journal recovery) (extents) (large files) (huge files)

こんな感じにUUIDとか出てきます。

・ext4ファイルシステムを作成

[ec2-user ~]$ sudo mkfs -t ext4 /dev/xvdb

今回は/dev/xvdbを指定します。

・マウントポイントディレクトリの作成

[ec2-user ~]$ sudo mkdir /data

/dataにマウントしたいので指定します。

・/dataにボリュームをマウント

[ec2-user ~]$ sudo mount /dev/xvdb /data

/dev/xvdbを/dataにマウントします。

・fstabをコピーしエントリを追加

[ec2-user ~]$ sudo cp /etc/fstab /etc/fstab.orig

なんかあったときに戻せるようにしますw

[ec2-user ~]$ sudo vim /etc/fstab
/dev/xvdb       /data   ext4    defaults,nofail        0       2

上記のようにマウントオプション、ダンブ頻度、ファイルシステムチェックの順番をエントリしたらOKです。
値など分からない場合はとりあえずこんな感じにしましょう。

・動作確認

[ec2-user ~]$ sudo mount -a

なにもエラーなければOKです。

[ec2-user ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 30G 0 disk /data →うおおおおOK!!!

/etc/fstabファイルにエラーがあるとブート不能になるのでシャットダウンしてはダメです!

・ダメだった場合

[ec2-user ~]$ sudo mv /etc/fstab.orig /etc/fstab

戻しましょう!


■まとめ

ディスク系はほんとに怖い。。
多分このブログ見てくれれば何一つトラブルないと思います!( ー`дー´)キリッ

参考:http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-using-volumes.html

[sshd]sshd_configで使うMatchについて

$
0
0

Hai Adachinです。

そういえば今日は2/1!!!

もう2月なの!?と言いたいところですが、今食べたいのはシュラスコ。

まったく関係ないですが、

今日はsshdについてです。sshd

 

インフラメンバー(先輩)に

「sshをポートでユーザごとに制限かけれるように設定してほしい」と言われたので、

そもそもそんなことできるのか!?と自分の能力のなさに笑ってしまったのでとりあえず調べました。


■Matchってなんなの

クライアントの接続条件によって sshd の設定内容を変更するもの。
異なるポートで複数のコンフィグファイルを使用して別々にサーバを起動させないとダメなところを1つにまとめることができる。
ポート以外の条件でも異なる設定内容が使えたりなどなど。

とりあえずMatchを使えばユーザごとに制限できる!

# man sshd_configをしてみた。

# man sshd_config |grep Match
Match  Introduces a conditional block. If all of the criteria on the Match line are satisfied, the keywords
       on the following lines override those set in the global section of the config file, until either
       another Match line or the end of the file. If a keyword appears in multiple Match blocks that are
       satisified, only the first instance of the keyword is applied.

訳してみた(Google翻訳より)

マッチライン上の基準のすべてを満たしている場合には、次の行にキーワードが別のマッチラインまたはファイルのいずれかの端までのconfigファイルのグローバルセクションに設定されたものを上書きします。

■Matchで使えるキーワード

1.User
2.Group 
3.Host SSH
4.LocalAddress 
5.LocalPort 
6.Address

とりあえずこの6つが上書きされます。


■設定例

[root@adachin-server]# grep adachin /etc/ssh/sshd_config
Port 22

AllowUsers !*

Match LocalPort 22
      AllowUsers adachin ec2-user

これでadachin、ec2-userのみsshできるようになりました!(解決)


■まとめ

ユーザごとに制限ができるので、SFTPもセキュリティー高められそう。

他にもポートだけじゃなく、ユーザグループも指定できるので、ここらへんは使い分けるといいですね。

Match Group adachinmember みたいに

参考:http://togakushi.bitbucket.org/build/html/OpenSSH_AdventCalendar2014/06.html

[CentOS]これで君も!CentOS7のコマンドマスター![Part1]

$
0
0

Hai Adachinです。

相変わらず咳が止まらないのですが、病院行っても

「ただの風邪だね!」

そんなわけないやろおおおおお!

というわけで、今回はCentOSのお話。

会社でCentOS7使いましょう!となりそうなので、

コマンドがわけわからんのでまとめてみました。

ちなみに結構変わってるので、ブログ二回に分けますw

c01


■何が今までのCentOSと違うのか

そもそもCentOS7系だとサービス起動デーモンが「sysvinit」に代わって、「systemd」が導入されました。

そのせいでサービス系コマンドがかなり変わったという・・・


■サービスの状態確認

・CentOS7

$ systemctl status nginx #nginxのステータス確認

・CentOS6

$ /etc/init.d/nginx status

■サービスの起動、停止、再起動

・CentOS7

$ ststemctl {start / stop / restart / reload} nginx

・CentOS6

$ /etc/init.d/nginx {start / stop / restart / reload}

■サービスの強制終了

・CentOS7

$ systemctl kill -s 10

・CentOS6

$ kill -10 PID

■サービスの起動確認/自動設定

・CentOS7

$ systemctl list-unit-files | grep nginx
$ systemctl enable / disable nginx

・CentOS6

$ chkconfig |grep nginx
$ chkconfig nginx on / off

■Unitログ確認

・CentOS7

デフォルトだと/run/systemd/journal以下に書き込まれ、再起動すると消えるという・・・メンドクセ
なので、/var/log/journalをmkdirして、journalの再起動をする必要がある。(systemctl restart systemd-journald)

$ journalctl -u unitname

・CentOS6

$ cat /var/log/messages

まとめ

わかりづらい・・・完全に慣れるんだ自分よ!

次回は引き続き更新します。

参考:http://www.school.ctc-g.co.jp/columns/nakai/nakai47.html
http://qiita.com/shotaTsuge/items/9f337bad9f73c3953af1

[wordpress]php-fpmが重いのでチューニングっ!!!

$
0
0

Hai Adachinです。

会社でテックブログをやっているのですが、

急に重くなり、全くアクセスができない状態になってるので、

あだちんちょっとサーバ見てくれないですか!?

となったので、中身見てみました。

そもそもwordpressってバージョン上がるとなんかしらアクシデントがあるので運営がめんどくさいところ。

もちろんこのAdachin-serverブログもそうなので、そろそろghostに移行しようか迷い中。。。

環境はCentOS6.7 + wordpress nginx + php-fpmです。

wordpress_nginx_php_fpm


■ボトルネックを探す

$ htop

h01

php-fpmの待ちプロセスがぱない。。。何個あるのよってかんじ。(画像は例です)

・アクセスログの確認

こいつはやべえ・・・


■ボトルネック = php-fpm、アタック

きっとphp-fpmのチューニングがうまくいってない模様!!!
なのでログとconfファイル確認しましょう。

# more /var/log/php-fpm/error.log
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers),
spawning 8 children, there are 4 idle, and 27 total children
[訳]poolしてるコネクションを使い切ってるぜ。pm系の値増やしてくれ。頼んだぜ。

どうやらnginxとphp-fpmはDBの接続をpoolしてアクセスがあると空きができるまで待たせられるみたい。

後はアタックきてたので、/etc/hosts.denyで拒否してやった。
(nginx.confでもdenyでもおk)


■子プロセス数の変更(例)

# vim /etc/php-fpm.d/www.conf

デフォルトのままだったので変更しました。

staticの場合だと固定値でメモリを保有するので処理速度は上がりますが、スペックがよければ問題ありません。
今回は4コアでメモリ4GBなので。。。他の処理にもメモリを割り当ててくれるdynamicにしました。

pm = dynamic

・作成される子プロセスの最大数(max cliant的な)

pm.max_children = 10 #増やせばもちろんCPUも食います

・起動時に作成される子プロセス数。

pm.start_servers = 5

・アイドル状態のサーバプロセス数の最小値。

pm.min_spare_servers = 5

・アイドル状態のサーバプロセス数の最大値。(pm.start_servers + pm.min_spare_servers)

pm.max_spare_servers = 10

・各子プロセスが再起動するまでに実行するリクエスト数。 (メモリリーク対策)

pm.max_requests = 512

・phpのメモリ利用制限

php_admin_value[memory_limit] = 128M

ちなみに子プロセスもっと下げてもいいんだろうけど下げたらタイムアウトになった・・・


■再起動

# /etc/init.d/php-fpm restart
# /etc/init.d/nginx restart

■まとめ

とりあえずこれでCPU負荷、メモリ消費、ロアベが抑えられサイトもアクセスできるようになった。
チューニングは適宜変更して運営していきましょー(・∀・)

参考:http://blog.offline-net.com/2015/05/09/centos-65-nginx-php-fp%EF%BD%8D-memory-tunables/

[監視]monitが熱い!!インストールからプロセス監視まで

$
0
0

Hai Adachinです。

今回はプロセス監視で有名な「monit」を紹介します。m03

ブルドックちゃんイカツイ・・・

 

ふと、会社のzabbix/nagiosが落ちてしまったので、自動で起動して、メールも通知できたらいいねとなったので、

じゃあシェルスクリプトでいいじゃないでしょうか!となったのですが、

せっかくだからmonit導入しよう!しかも最近バージョンも上がってwebインターフェースもカッコ良くなったとか。

というわけでインストールからプロセス監視までブログしていきます。


■インストール

# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# yum -y install monit

# monit -V
This is Monit version 5.14
Copyright (C) 2001-2015 Tildeslash Ltd. All Rights Reserved.

# /etc/init.d/monit start

# chkconfig monit on


■/etc/monit.conf

2つ追記します

・webインターフェースの設定

set httpd port 2812 and
 #use address localhost # only accept connection from localhost  #コメントアウト
  allow localhost # allow localhost to connect to the server and
  allow 192.xx.xx.xx/255.255.255.0 # allow localhost to connect to the server and #ネットワーク許可
  allow adachin:adachinmonit # require user 'admin' with password 'monit' #ログイン名パスワード

・アラートメール設定

set mailserver localhost
set mail-format {
   from: monit@server01
   subject: monit alert -- $EVENT $SERVICE
   message: $EVENT Service $SERVICE
   Date: $DATE
   Action: $ACTION
      Host: server01
      Description: $DESCRIPTION
     Your faithful employee,
     Monit
 }
set alert adachin@hoge.com


■/etc/monit.d

・monit.dディレクトリにプロセス監視したいサービスを追加していきます。

今回はzabbix-serverのプロセス監視ファイルを作成します。

# vim zabbix
set daemon 60
check process zabbix with pidfile /var/run/zabbix/zabbix_server.pid #プロセス名 lockファイルでも可能
   start program = "/etc/init.d/zabbix-server start" #起動コマンド
   stop program = "/etc/init.d/zabbix-server stop" #停止コマンド
   group zabbix #グループ権限

こんな感じで、nagios、nginx、mysqldなどなど監視ファイルを作成していきます。

・monit再起動と設定確認

#/etc/init.d/monit restart

# /usr/bin/monit -vI
エラー等出てなければOK


■ログイン

http://GIP:2812

adachin:adachinmonit

ログインできたら以下の画面が出るはずです。m02

あとはポチポチ押せばこのプロセス止めたいとか起動したいとかできます。

それにプロセスが落ちたらアラートメールが来て、すぐに落ちたプロセスを起動して復旧メールも届きます。


■まとめ

導入がかなり簡単なので、死活監視はmonitでも良さそう・・・

ブルドックやりおる(・∀・)m01

参考:https://mmonit.com/monit/
http://www.tecmint.com/how-to-install-and-setup-monit-linux-process-and-services-monitoring-program/

[AWS][Disk]Instance Storeを後から追加してマウントする方法

$
0
0

明日はスノボーだああああ!!

Adachinです。本日はAWSのお話。

AWSってホントに便利ですよね〜

機能も充実してるけど維持費がやたら高いところが残念なところ。

今回は「Instance Store」を使っていなかったけど忘れてて使いたい時はどうするのか

をブログします。そもそもInstance Storeってなんぞから説明していきます。logw_title_aws


■Instance Storeとは

インスタンスで使用するためのブロックレベルの一時ストレージのこと。
簡単に言うと無料枠じゃないインスタンスタイプ(性能がいい)にはボリュームが
デフォルトで付属しているものですね。
(例)
c3.xlarge 2 x 40 GB SSD(80 GB)などなど。。
ちなみにこれって最初にEC2の設定で追加しないと使えないんです。。(サーバ停止しても)
やっちまったな!と言いたいところですがある方法を使えば余裕で追加できます。i01


■そもそもInstance Store(Storage)ってなにに使うのがベストなのか

[AWSマイスターシリーズ] Instance Store & Elastic Block Storeよりこんなことが書いてあります。

i02

結局データとかログ系に最適みたいですね。


■新規で追加したい場合

EC2で「ステップ 4: ストレージの追加」でできます。ii03


■後から追加したい場合

・対象のインスタンスで確認

$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/
ami
root

ephemeral*と表示されていなかったら追加されてないと判断します。

AMIの作成

・EC2から対象のインスタンスをイメージに焼く
i04

・先程焼いたイメージを起動i05


■マウントをする

$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/
ami
ephemeral0 →ある!
root

$ sudo fdisk -l
Disk /dev/xvdb: 42.9 GB, 42941284352 bytes, 83869696 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk /dev/xvdc: 42.9 GB, 42941284352 bytes, 83869696 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

これで約80GB認識されてる!あとはマウントするだけだ!

・フォーマット

$ sudo mkfs.ext4 /dev/xvdb 
$ sudo mkfs.ext4 /dev/xvdc

・マウントディレクトリの作成

$ sudo chmod 777 -Rf /ephemeral0{1,2}  #ディレクトリは何でもOK
$ sudo chmod +t /ephemeral0{1,2}

・fstabの編集

$ sudo vim /etc/fstab
下記を追加
/dev/sdb /ephemeral0 auto defaults,comment=cloudconfig 0 2 
/dev/sdc /ephemeral1 auto defaults,comment=cloudconfig 0 2

・マウントコマンドで認識させる

$ sudo mount -a

$ df -h 
ファイルシス サイズ 使用 残り 使用% マウント位置
~省略~
dev/xvdb 40G 11G 28G 28% /ephemeral0 →追加されてる!
dev/xvdc 40G 48M 38G 1% /ephemeral1 →

・最後に

あとは現使用しているEIPと今回作ったインスタンスにひも付けすれば完了


■まとめ

安定のAWSの凄さ・・・

参考:http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/InstanceStorage.html#StorageOnInstanceTypes
http://dev.classmethod.jp/cloud/aws/instance-storeephemeral-disk/


[monit]CPU ロアベ メモリー ディスクを監視する方法

$
0
0

Hai Adachinです。

今回はmonitでシステムリソース「CPU ロアベ メモリー ディスク」の監視方法をまとめます。

m01

非常に簡単なので、すんなり追加できるかと思います。ブルドッグ最強・3・

他にも外部監視もできるみたいなのでそこらへんは次回まとめます(・∀・)


■/etc/monit.conf

以下を追加しましょう。

###############################################################################
## Services 
###############################################################################

##loadavg,cpu,memory check##
check system adachin.com #サーバ名
 if loadavg (5min) > 2 then alert #5分間のうちロアベ2以上だとアラート
 if cpu usage (user) > 70% then alert #CPU70%以上だとアラート
 if cpu usage (system) > 30% then alert #CPU使用量が30%以下だとアラート
 if memory usage > 75% then alert #メモリー使用量が75%以上だとアラート

##disk check
check device disk_/ with path / #/以下を監視
 if space usage > 80% for 5 times within 15 cycles then alert #5分間80%以上だとアラート
 if space usage > 95% then stop #95%以上だとstop
 if inode usage > 90% then alert #90%だとアラート

check device disk_dev with path /dev #/dev以下を監視
 if space usage > 80% for 5 times within 15 cycles then alert #上記のものと同じ
 if space usage > 95% then stop
 if inode usage > 90% then alert

・再起動

$ sudo /etc/init.d/monit restart


■確認

moni

webコンソールにアクセスしたら上記の用に監視項目が増えてればOK


■まとめ

超簡単。

アラートってslackにも飛ばせられないのかな・・・
https://mmonit.com/wiki/MMonit/SlackNotification

いい加減dockerを勉強したい・・・

参考:https://mmonit.com/wiki/Monit/ConfigurationExamples

あとM/Monitというのがあるのだが、これはエージェントを入れて統合監視ができるみたい。
zabbixみたいな感じかな。
しかも値段かかる・・・

[docker-machine]いい加減Macでdocker環境を構築してみた

$
0
0

Helloooo Adachinです。

2月はdockerを勉強しよう!と目標を作っていたのですが、

なかなか勉強できてなかったので、無念・・・

とりあえずエンジニアの先輩、友人に

「絶対に導入したほうがいい」「インフラやってるなら勉強しないとアカンよ!」

などとよく言われていたので、Macで環境構築してみました。4P9pfv_Txb

そもそもdockerってなに?からブログしていきたいと思います。


■dockerとは

はい。クジラですw

Linuxのコンテナ系技術を利用してアプリケーションのビルド、デプロイ、実行を行うコンテナ管理ソフトウェア。
Docker社(旧dotCloud社)のSolomon Hykes氏によってGo言語で作成され、
Apacheライセンスで配布されているオープンソースソフトウェア。

とりあえずコンテナというワードが重要です!

仮想実行環境って今までだとハイパーバイザ型やホスト型があると思うんですが、

ゲストOSを稼働しないといけないし、時間もかかるし、CPUやメモリ、ディスクなどのリソースも多く消費して運営が大変・・・

dockerだと展開や起動は素早いし、ゲストOSの実行やハードウェアのエミュレーションなどのオーバーヘッドはありません。docker-vm-container

つまり軽くてやたらと早いインフラコンテナ技術と覚えておきましょう!


■docker-machineってなんなの

dockerホストを様々な仮想化環境に構築できる。
AWSでも、VirtualBoxでも、ESXiでもDocker deamonがインストールされたVMを作成できる。

去年(2015年)くらいに発表されたもので、簡単にdocker環境をつくることができるようになりました。docker-machine_w_450

僕はとりあえずvagrantにdockerいれて・・・メンドクサイ。この作業がなくなります。

図を書いてみました。d01

こんな感じでMac上にdocker-machineの中にcentosやらubuntuやら素早くインフラ環境が作れるというわけです。

もちろんテスト環境なんて一瞬で、複製や削除も一瞬です。
テスト環境はvagrantなのですが、dockerでよさそう。。

では構築してみましょう!


■Macにdocker環境を構築する

・homebrewでインストール

adachin-mac$ brew install docker

・docker-machineをインストール/実行権限追加

adachin-mac$ curl -L https://github.com/docker/machine/releases/download/v0.2.0/docker-machine_darwin-amd64 > /usr/local/bin/docker-machine

adachin-mac$ chmod +x /usr/local/bin/docker-machine

・docerホストの作成

adachin-mac$ docker-machine create --driver virtualbox test-docker

test-dockerというホスト名で作りました。1分もかからず作成されます。
ここでエラーが出た人はvirtualboxのバージョンが4系じゃないとダメなので公式サイトからダウンロードしましょう!

・環境変数をセット

adachin-mac$ eval "$(docker-machine env test-docker)"

docerホストがcreateされた時にこのコマンド打つんやで!!と言われるのでセットします。
永続的に設定したい場合は~/.bash_profileに記入しましょう。

・dockerホストの確認

adachin-mac$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
test-docker * virtualbox Running tcp://192.168.xxx.xxx:2376

adachin-mac$ env | grep -i docker
DOCKER_HOST=tcp://192.168.xxx.xxx:2376
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/Users/adachin/.docker/machine/machines/test-docker

できてる!

・dockerホストにログイン

adachin-mac$ docker-machine ssh
                ## .
          ## ## ## ==
         ## ## ## ## ===
      /""""""""""""""""\___/ ===
    ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
       \______ o __/
        \ \ __/
         \____\______/
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.10.2, build master : 611be10 - Mon Feb 22 22:47:06 UTC 2016
Docker version 1.10.2, build c3959b1

クジラ!

他のホストにログインする場合は$ docker-machine ssh ホスト名でOK

・dockerコンテナを作成

ホスト上でdockerコマンドを叩いても問題ないのですが、
Macからdockerホストに直接コマンドを叩けるので、今回はこっちでいきます。

とりあえずcent6とcent7のコンテナを作成してみましょう。
イメージファイルは公式からです。

adachin-mac$ docker $(docker-machine config test-docker) run centos:6 echo test-server01

adachin-mac$ docker $(docker-machine config test-docker) run centos:7 echo test-server02

・ホスト上からイメージを叩く場合

docker@docker:~$ sudo docker pull centos:6

docker@docker:~$ sudo docker pull centos:7

・イメージファイルの確認

adachin-mac$ docker-machine ssh

docker@docker:~$ docker images
REPOSITORY     TAG         IMAGE ID          CREATED               SIZE
centos         6           d0a31e3494fe      xx hours ago          228.9 MB
centos         7           d0e7f81ca65c      xx hours ago          196.6 MB

・コンテナにログインしてみる

docker@docker:~$ sudo docker run -i -t centos:6 /bin/bash
[root@39fc4bc343ed /]#

できた。

exitするとプロセスが終了してしまうため、Ctl+p Ctl+qで脱出すればすぐにログインできる。
ちょっと特殊ですがやってみますね。

[root@39fc4bc343ed /]# exit
exit

docker@docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
 NAMES
プロセスがない

docker@docker:~$ sudo docker run -i -t centos:6 /bin/bash
[root@eff483b031f9 /]# docker@docker:~$ Ctl+p Ctl+q 脱出

docker@docker:~$ docker ps
CONTAINER ID IMAGE     COMMAND     CREATED       STATUS  PORTS      NAMES
eff483b031f9 centos:6 "/bin/bash"  7 seconds ago Up      6 seconds  nostalgic_varahamihira
↑プロセスがある

・起動中のコンテナにログインする場合

docker@docker:~$ docker attach eff483b031f9
[root@eff483b031f9 /]#

tmuxみたいですがこんな感じです。

・コンテナイメージをコピーしたい場合

docker@docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eff483b031f9 centos:6 "/bin/bash" 8 minutes ago Up 8 minutes nostalgic_varahamihira

docker@docker:~$ sudo docker commit eff483b031f9 adachin-centos:6
sha256:172a330445105bc03eb3d20f544cb030c61ee46f417e51cdb5efe7457ab276ea

docker@docker:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
adachin-centos 6 172a33044510 4 seconds ago 228.9 MB
centos 6 d0a31e3494fe 16 hours ago 228.9 MB
centos 7 d0e7f81ca65c 16 hours ago 196.6 MB

docker@docker:~$ sudo docker run -i -t adachin-centos:6 /bin/bash
[root@cc5c5175ce0f /]#

adachin-centos6というコンテナが作成できてますね。
これでじゃんじゃ作れる感じです。

ちなみにコンテナの履歴は消さないと残り続けるてディスク圧迫してしまうので、
クリーンしときましょう。

docker@docker:~$ sudo docker rm $(sudo docker ps -a -q)


■まとめ

今回はdockerってこんな感じなのかでOKです。
次回はDockerfileを使って、ユーザ作成、パッケージインストール、
LAMP環境構築方法をブログしたいと思います。

dockerコマンドたくさんあるので使い方も書きますね。(・∀・)b
ちなみにdockerはCoreOSが最適みたい。

参考:https://docs.docker.com/machine/

[linux]ソースからインストールしたものをアンインストールする方法

$
0
0

うおおおおおお

ソースインストールううううう!!!!

Adachinです。

ソースでのインストールしたものって基本どこに入っているか分からないし、

どうやってアンインストールするのかまったく分からなかったのでブログします。

先ほど本番環境でoptipngなど圧縮系コマンドをインストールしてほしいとの要望があったので

勝手にソースでインストールしたため、先輩らにめちゃめちゃ怒られましたww

※linux作ったリーナスさんのFxxk u より


■yumとソースでのインストールのメリット,デメリット

ここらへんまとめてみました。

・yum(メリット)

  1. インストール・アンインストールが1コマンドで実行できる
  2. パッケージがアップデートされているかも簡単にわかる
  3. 時間かからん
  4. 関連するパッケージもまとめてインストールできる
  5. パッケージをインストールしたかどうかも分かる

・yum(デメリット)

  1. OSによっては最新パッケージを利用できない
  2. 新旧バージョンが共存できない
  3. 使わなさそうな機能までインストールされる

・ソース(メリット)

  1. 新旧バージョンが共存できる
  2. 使う機能だけインストールできる
  3. OSに依存せず最新パッケージ(あるいはダウングレード)が使える

・ソース(デメリット)

  1. インストールだるい
  2. 関連するパッケージを1つずつインストールしないといけない

■ソースでインストールしたコマンドはどこなのか確認

# which optipng
/usr/local/bin/optipng →これだ


■アンインストール

# cd /usr/local/bin/optipng2.0

・ソースファイルのディレクトリにて

# make uninstall

・確認

# which optipng
/usr/bin/which: no optipng in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)

消えた。終わり


■まとめ

コマンドインストール時にも必ず検証からの
上の方にホウレンソウしていくことを気をつけたいところ。。(;・∀・)

linux力をあげたい

参考:https://www.softel.co.jp/blogs/tech/archives/2710

[Docker][docker-machine][Dockerfile]nginxを動かす!

$
0
0

Hai Adachinです。

今回はdocker-machineNginxをインストールして、テスト画面を表示させたいと思います。

docker-machineにこだわらず、サーバにdockerをインストールしている環境でも基本は使い方同じです。

そもそもパッケージ管理は全て「Dockerfile」を使用してnginxなりmysqlなりインストールするわけです。

自動化のレシピのようなイメージ。

書き方もとても簡単なのでご紹介します。

構築するまでめちゃくちゃ軽いし、早いです。


■Dockerとコンテナの仕組み

ちょっとDockerとコンテナのネットワークの図を作ってみました。
Dockerホスト側がルーターというイメージでコンテナ側はポート開放なイメージです。
コンテナには勝手にIP振られます。

docker


■docker Imageの確認

docker@test-docker:~$ docker images
 REPOSITORY TAG     IMAGE ID          CREATED       SIZE
 centos      6      5a328db7d3ae      4 days ago    576 MB
 centos      7      d0e7f81ca65c      6 days ago    196.6 MB

とりあえず前回のブログでImageをダウンロードしたのでcentos:6を使いましょう


■Dockerfileの作成

$ cd
$ mkdir dockerfile_nginx
$ cd dockerfile_nginx
$ vi Dockerfile

# Getting Base Image
FROM centos:6

# start install nginx
RUN yum update -y
RUN yum install -y vim
RUN yum install -y curl
RUN rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
RUN yum install -y nginx
RUN /etc/init.d/nginx start
RUN chkconfig nginx on

# Port
EXPOSE 22 80

# echo running
CMD ["echo", "running!"]

保存できたらdocker自体のIPを確認しましょう!

docker@test-docker:~/dockerfile_nginx$ ip route |grep eth1
192.168.99.0/24 dev eth1 proto kernel scope link src 192.168.99.100

・ビルド

こんな名前にしてみました

$ docker build -t adachin/nginx_centos6:latest .

・インストールを待つ

 CMD ["echo", "running!"] と出ればOK

・確認

できてる

$ docker images
REPOSITORY              TAG       IMAGE ID          CREATED          SIZE
adachin/nginx_centos6   latest    4e0eee40ab6a      2 minutes ago    609.5 MB
centos                  6         5a328db7d3ae      4 days ago       576 MB
centos                  7         d0e7f81ca65c      6 days ago       196.6 MB

・ビルドしたコンテナを起動する

$ docker run -it -p 8080:80 adachin/nginx_centos6:latest /bin/bash
[root@da87aa58783f /]#

・webサイトで確認

 

n01

でけた。


■まとめ

次回はMysqlコンテナやDocker HubというGithubみたいな
自分が作ったコンテナをpullしてそれを自分のdockerからcloneしてすぐに
構築できるやり方をブログします。

しかし、早い・・・
vagrant立ち上げるのが遅いからもう使わない・・・

参考:http://qiita.com/kasaharu/items/d4654193d75c67d65226

[Monit]メモリー量が閾値を超えるとプロセスを再起動する

$
0
0

Hai Adachinです。

前回のブログでMonitの使い方をブログしたんですが、

今回は単にプロセスが落ちたら自動で再起動できるのは分かった

けど、

メモリーが全体で6GBあるとして3GB超えたらプロセス再起動できるの!?

を!ブログします。

原因が分かっていれば、落ちて自動で再起動するよりもいいんじゃないか。

でもアプリにも原因があるのでは!?と言いたいところですが。。。(・∀・汗)


■/etc/monit.d/nginx

check process nginx
    with pidfile "/var/run/nginx/nginx.pid"
    start program "/etc/init.d/nginx start"
    stop program "/etc/init.d/nginx stop"
    if totalmem 3000.0 MB for 3 cycles then restart
  # nginxのtotalメモリが3GBを3度超えるとnginxの再起動

今回はnginxがプロセスです。

こんな感じにif分書いてさくっと条件指定できます。


■メール

Monit 
ACTION : restart 
SERVICE : nginx
at Thu, 11 Feb 2016 02:24:00 on [adachin-server]. 
DESCRIPTION : total mem amount of 3.0 GB matches resource limit [total mem 3.5 GB]

このように閾値を超えると「再起動したぜ。理由は3.5GBも超えたからな!」とメールがきます。


■まとめ

犬だったら実家にブルドッグかフレンチブルドッグほしいいい
と親に嘆いたら、「ブスだから買わない」って断られました・・・

そんなことよりも管理画面でポチポチと閾値設定とかできればいいなと思う。

参考:https://mmonit.com/monit/documentation/monit.html

Viewing all 164 articles
Browse latest View live