nagios check_snmp
概要
nagiosのnrpeを用いたcheck_snmp監視を実施した際のメモ。
差分 --rate
ネットワークの量を求めるにはある時点とある時点の差分が必要。ある時点だけ高いなどあるからだと思われる。 SNMPはカウンタを用いて差分を求めるようにしている様子。カウンタはネットワークの総量との認識。
--rate-multiplier 8
計算の間隔を8秒にする。8秒にすることで単位をbpsにすることができる。
わかりにくいところ
差分を求める際に、ある時点からある時点への時間が10分だとした時に--rate-multiplier 8
だと8秒ずつで区切って計算された
値が平均され取得されると思われる。
コマンドラインから試してみた
だいたい同じ値になるので、そうではなかろうか。
30秒 SNMP RATE CRITICAL - *26882812.12* | IF-MIB::ifHCOutOctets.3=26882812.12;5000000;10000000; 300秒 SNMP RATE CRITICAL - *27400005.63* | IF-MIB::ifHCOutOctets.3=27400005.63;5000000;10000000;
プロセス状態
概要
プロセスの状態について調べたことのメモ。
sleeping
とあるホストでpsコマンドを叩くとほとんどプロセスの状態がsleepになっていた。
$ ps auxf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 2 0.0 0.0 0 0 ? S Nov16 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Nov16 0:00 \_ [migration/0] root 4 0.0 0.0 0 0 ? S Nov16 0:00 \_ [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S Nov16 0:00 \_ [stopper/0] root 6 0.0 0.0 0 0 ? S Nov16 0:00 \_ [watchdog/0] root 7 0.0 0.0 0 0 ? S Nov16 0:08 \_ [events/0] root 8 0.0 0.0 0 0 ? S Nov16 0:00 \_ [events/0] root 9 0.0 0.0 0 0 ? S Nov16 0:00 \_ [events_long/0] root 10 0.0 0.0 0 0 ? S Nov16 0:00 \_ [events_power_ef] root 11 0.0 0.0 0 0 ? S Nov16 0:00 \_ [cgroup] root 12 0.0 0.0 0 0 ? S Nov16 0:00 \_ [khelper] ・ ・ root 1 0.0 0.0 19232 1236 ? Ss Nov16 0:01 /sbin/init root 537 0.0 0.0 11248 344 ? S<s Nov16 0:00 /sbin/udevd -d root 1628 0.0 0.0 12400 552 ? S< Nov16 0:00 \_ /sbin/udevd -d root 1629 0.0 0.0 12400 552 ? S< Nov16 0:00 \_ /sbin/udevd -d root 1155 0.0 0.0 27596 712 ? S<sl Nov16 0:00 auditd root 1177 0.0 0.0 249088 1264 ? Sl Nov16 0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5 rpc 1203 0.0 0.0 18980 512 ? Ss Nov16 0:00 rpcbind root 1362 0.0 0.0 200108 1432 ? S Nov16 0:19 /usr/sbin/snmpd -LS0-6d -Lf /dev/null -p /var/run/snmpd.pid root 1388 0.0 0.0 66236 604 ? Ss Nov16 0:00 /usr/sbin/sshd root 20200 0.0 0.0 102084 4464 ? Ss 07:56 0:00 \_ sshd: root@pts/0 root 20206 0.0 0.0 111880 5592 pts/0 Ss 07:56 0:00 \_ -bash root 23654 3.0 0.0 110352 1152 pts/0 R+ 08:30 0:00 \_ ps auxf
実行可能状態のプロセスはこのコマンドを打ったpsのみ。他は全部S。
straceで処理をみる
straceでどんな処理をしているのかを見てみた。
適当にプロセスを選ぶ
$ strace -p 1615 Process 1615 attached read(0,
$ strace -p 1388 Process 1388 attached select(6, [3], NULL, NULL, NULL
別の端末でvmstat 1
で1秒おきに表示
root 24143 1.3 0.0 102084 4340 ? Ss 08:38 0:00 \_ sshd: root@pts/1 root 24149 1.0 0.0 111896 5528 pts/1 Ss 08:39 0:00 \_ -bash root 24185 0.0 0.0 6260 696 pts/1 S+ 08:39 0:00 \_ vmstat 1
vmstatをstraceでみてみた。これもpsでみるとS
$ strace -p 24185 Process 24185 attached restart_syscall(<... resuming interrupted call ...>) = 0 lseek(3, 0, SEEK_SET) = 0 read(3, "MemTotal: 8001920 kB\nMemF"..., 2047) = 1170 lseek(4, 0, SEEK_SET) = 0 read(4, "cpu 717231 881 184526 16100359 "..., 65535) = 1152 lseek(5, 0, SEEK_SET) = 0 read(5, "nr_free_pages 1161281\nnr_inactiv"..., 2047) = 1912 write(1, " 0 0 23164 4645124 206708 2733"..., 85) = 85 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 nanosleep({1, 0}, 0x7ffd056041d0) = 0
なぜsleepだけなのか
straceでプロセスをみると、readやwriteやsleepなどの処理が実行されている。たぶん、プロセスの処理の中でこれが大半を占めていて、待ちになっている割合のほうが多いと思われる。もちろんそれ以外のプログラムの箇所もあるだろうが、わずかで一瞬で終わるのじゃないだろうか。Rの状態はあるけれども一瞬過ぎてpsなどでは捉えられない?
CentOSのリポジトリとか
概要
デバッグ情報リポジトリ
デフォルトでCentOS-Debuginfo.repo
が入っている。
デバッグ情報付き?のパッケージをインストールするときは基本これだけ??
yum-config-manager
例えばCentOS-Debuginfo.repo
を常時使えるようにする場合は下記のコマンドを打てばよい。
yum-config-manager --enable debug
debuginfo-install
NAME debuginfo-install SYNOPSIS debuginfo-install package DESCRIPTION debuginfo-install is a program which installs the RPMs needed to debug the specified package. The package argument can be a wildcard, but will only match installed packages. debuginfo-install will then enable any debuginfo repositories, and install the relevant debuginfo rpm. EXAMPLES Download and install all the RPMs needed to debug the kernel RPM: debuginfo-install kernel
debuginfo repositoriesを有効にして関係あるdebug情報付きのRPMをインストールする。と思ったけど、debuginfoを有効にしていないとうまくコマンドでインストールできない。
まとめ
yum-config-manager --enable debug してから debuginfo-install package などする
rediscluster
概要
redisclusterを使ってみたので自分メモ。
rubyからrediscluster
最初はこれを元に修正してrubyからclusterを扱おうと思ったが、expireなどにはまだ対応していなかったのでrubyからは断念。
GitHub - antirez/redis-rb-cluster: Redis Cluster Ruby client based on redis-rb
まだrubyからはあまり対応していないのかな?
phpからrediscluster
phpからredisclusterを扱うことは割りと情報が沢山あったように思えた。実際にphpredisを使ってクラスタをうまく扱うことができた。
phpredis/cluster.markdown at develop · phpredis/phpredis · GitHub
redisclusterに対して個別にset、get
rediscluster対応ではないphpから個別にクラスタ構成のredisに対してsetすることでも上手く行くのかなと思ったが(クラスタへのredis-cliのような)、どうも受け取ったクラスタのredisから他のredisにデータを渡すときにエラーが出るようで上手く行かないらしい。
一般ユーザでansibleを実行
概要
一般ユーザでansibleを実行しようとしたけど失敗するので色々みてみた。
実行
ansible -m shell -a "while true; do date; ls -l; sleep 5; clear; done;" -s --ask-sudo-pass ホスト名
PSコマンドでみてみた
root \_ sshd: 一般ユーザ名 [priv] 一般ユーザ名 \_ sshd: 一般ユーザ名@pts/1 一般ユーザ名 \_ /bin/sh -c sudo -H -S -p "[sudo via ansible, key=xxxxxxxxxxxxx] password: " -u root /bin/sh -c 'echo BECOME root \_ sudo -H -S -p [sudo via ansible, key=xxxxxxxxxxxxxx] password: -u root /bin/sh -c echo BECOME-SUCCESS-bl root \_ /bin/sh -c echo BECOME-SUCCESS-bltxuqbmpqpefrbgfvxtpbbxhdlhteio; LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 LC_MESSAGES=ja_JP. : : : root \_ /bin/sh -c while true; do date; ls -l; sleep 5; clear; done;
-u root
sudo -H -S -p[] -u root
ansibleの内部でsudo -u rootして/bin/shをしているようだった。この後のコマンドはこのシェルから実行していると思われる。なので
$ ansible -m shell -a "cat /var/log/secure " -s --ask-sudo-pass ホスト
sudoで許可しない設定にしているsecureログでもcatできるようだった。
-u root /bin/sh が内部で実行している限り、強制的に一般ユーザで実行できないのだろうか?
メモ
ansibleを実行するときに-u をつける。その時は別名をつける??
phpからredisを利用する
概要
phpよくわかってません。 phpインタプリタがリンクする共有ライブラリを確認したときに、peclでインストールしたredisの共有ライブラリがなかったので どうやってリンクしているんだろうと思ったときのメモ
phpからredisを使う
やはりredisが指定されていない。
$ ldd /usr/bin/php linux-vdso.so.1 => (0x00007ffe209cf000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fe868113000) libedit.so.0 => /usr/lib64/libedit.so.0 (0x00007fe867ee4000) libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fe867cc1000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fe8679bb000) libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fe8677aa000) libz.so.1 => /lib64/libz.so.1 (0x00007fe867593000) librt.so.1 => /lib64/librt.so.1 (0x00007fe86738b000) libm.so.6 => /lib64/libm.so.6 (0x00007fe867107000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fe866f02000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fe866ce9000) libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007fe866996000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fe866751000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fe86646a000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fe86623e000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fe866039000) libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fe865dcc000) libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fe8659e8000) libc.so.6 => /lib64/libc.so.6 (0x00007fe865653000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe865439000) libfreebl3.so => /lib64/libfreebl3.so (0x00007fe865236000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fe865014000) /lib64/ld-linux-x86-64.so.2 (0x00007fe868350000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe864dfe000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe864be1000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fe8649d5000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fe8647d2000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fe8645b2000)
peclでインストールされる場所
peclなどでインストールしたphpの共有ライブラリは、専用のディレクトリに配置され、 phpインタプリタは実行時にそこをみにいくようだ。
pecl config-show Configuration (channel pecl.php.net): PHP extension directory ext_dir /usr/lib64/php/modules
extension directoryが配置される場所。
redisがあるか
$ ll /usr/lib64/php/modules/ | grep redis -rwxr-xr-x. 1 root root 450624 Jun 9 15:06 redis.so
実行されているphpプロセスを確認
仮想メモリにロードされていることを確認。
cat /proc/9993/maps | grep redis 7f221e4f7000-7f221e560000 r-xp 00000000 fd:01 401352 /usr/lib64/php/modules/redis.so 7f221e560000-7f221e760000 ---p 00069000 fd:01 401352 /usr/lib64/php/modules/redis.so 7f221e760000-7f221e765000 rw-p 00069000 fd:01 401352 /usr/lib64/php/modules/redis.so
他にも/usr/lib64/php/modules/ないのモジュールがリンクされていることを確認。