webminのインストール

個人的に色々あってブログの投稿が止まっていましたが、やっと落ち着いてきました。

これから少しづつ投稿していこうとおもいます。

今回はlinuxでGUIでシステム設定ができる管理ツールwebminのインストールについて書きます。

最近はyumでさらっとインストールできるから楽ですよね。

まず、webminで必要なperlモジュールをインストールします。

# yum -y install perl-Net-SSLeay

次にwebminをインストールします。
yum -y install https://sourceforge.net/projects/webadmin/files/webmin/1.801/webmin-1.801-1.noarch.rpm

これで終わりです。chkconfigにも登録されています。

centos7を使用している際はsystemctlではなく従来の/etc/init.d/webadmin start で起動するので注意して下さい。

デフォルトのログインURLは下記のようになっています。

https://localhost:10000

変更したい場合はコンフィグを編集します。

# /etc/webmin/minesrv.conf

##ポート番号を10000から10080に変更

port=10000

⇒port=10080

:wq

保存して終了

サービスを再起動します。

# /etc/init.d/qwebmin restart

以上です。

 

 

 

zabbixでのデータ取得スクリプト 第2弾

前回基本となるデータ取得用スクリプトを作りましたがそれに修正を加えました。
データ抽出期間を指定する方法です。
私のzabbixは時間がunixtimeなのですが仕様なのかな・・・?
あまり気になる所じゃなかったのでそんなもんだとしていましたが
スクリプトで時間指定する場合にいちいちunixtime計算していると面倒なので
スクリプトに組み込んで通常の日時で指定できるようにしています。

※追記部分は太文字にしています
———————————————————————————
#!/bin/sh
#
#####################################################################
DATE=`date +%Y%m%d`

## pickup itemid select
echo ” please input id number ”

read id

echo ” please input table ”

read table

## Period designation
echo “please input the opening time year-mounth-day time ”

read opentime

echo “please input the closing time year-mounth-day time ”

read closetime

## unixtime changed
starttime=`date +%s –date “${opentime}”`
stoptime=`date +%s –date “${closetime}”`

## id check
CHECK=`mysql –user=zabbix –password=zabbix zabbix -N -s -e ” select itemid fro
m items where itemid=$id ;”`
CHECK=`expr $CHECK + 0`

## exec
if [ $CHECK -gt 0 ] ; then
mysql –user=zabbix –password=zabbix zabbix -e “select from_unixtime(clock),val
ue from ${table} where itemid=${id} and clock between ${starttime} and ${stoptime} ;” > csvfile/${DATE}_${id}.csv
else
echo ” No id !!”
fi

exit
———————————————————————————–

時間が空の場合は全てのログにするようにしようかなぁと思いましたが
今までの運用上時間を指定しない事がないので作りませんでした。
もし作るとしたらid checkのような感じでopentimeとclosetimeが空の場合は
時間設定のないsql文を実行するようにすればいいだけです。
わざわざ書く必要が無いくらい簡単です。
なもんで書いてません(`・ω・´)

指定回数実行スクリプト

あるMIB値を5秒間隔で20回取得して下さいという依頼がありました。しかも同時に複数のMIB値を取得、さらに違うコマンドも実行しろとか・・・手は2つしかないのでそんなに同時にできませんよ(・ω・;)

という事でMIB取得はスクリプトにて取得するよう書きました。

——————————
#!/bin/sh

i=1
while [ $i -le 20 ]
do
DATE=`date +%Y%m%d,%T`
SNMP=`snmpwalk -v2c -c public 10.57.9.51 UCD-SNMP-MIB::ssCpuIdle.0`
echo $DATE,$SNMP >> snmp_cpu_idle.txt
i=`expr $i + 1`
sleep 5

done

exit 0
——————————
標準MIBでCPUIdleを取得する方法をサンプルとして書いています。
複数SNMPを登録したい場合はSNMP=の下にSNMP2=とかSNMP3=とか複数作ってやって、echoで$SNMPの後ろにくっつけて下さい。
行を分けたかったらechoを複数行にするといいですが、連続で取得するので行を分けると分かりにくくなるのでお勧めしません。

zabbixデータ取得スクリプト

個人的なメモですが、zabbixのhistoryの値を手っ取り早く抽出する為にスクリプトを作りました。

itemidを入れて、tableを指定(historyを指定する事がほとんどですが、私の環境ではhistory_uintもあるので自分で指定する形にしました。historyに無かったらuintに探しに行くようにしてもいいですがあまり負荷をかけたくなかったのでシンプルなものにしました。

—–ここから—–
#!/bin/sh
#
#####################################################################
DATE=`date +%Y%m%d`

## pickup itemid select
echo ” please input id number ”

read id

echo ” please input table ”

read table

## id check
CHECK=`mysql –user=zabbix –password=zabbix zabbix -N -s -e ” select itemid fro
m items where itemid=$id ;”`
CHECK=`expr $CHECK + 0`

## exec
if [ $CHECK -gt 0 ] ; then
mysql –user=zabbix –password=zabbix zabbix -e “select from_unixtime(clock),val
ue from ${table} where itemid=${id} ;” > csvfile/${DATE}_${id}.csv
else
echo ” No id !!”
fi

exit

—–ここまで—–

時間指定とか期間指定とかもできますがとりあえずベースとしてシンプルなテンプレートにしてます。
あと当たり前ですがuserとpasswordとDBは自分の設定に合わせて下さい。
全部仮でzabbixにしてますけど。

zabbixアイテムでのCPU使用率の取得

linuxのCPU使用率をSNMPで取得しようとした際に特定のOIDで確認できるものではないので
計算を使って100からIdle値を引いた値で算出します。

まずは普通にCPUのIdleをOIDを登録します。
UCD-SNMP-MIB::ssCpuIdle.0(.1.3.6.1.4.1.2021.11.11.0)

ホスト:CPU使用率を取得したいホストを選択
説明:分かりやすく「CPUアイドル」とかにしてます
タイプ:SNMPv2エージェントを選択。ここは対向先のSNMPバージョンに合わせて下さい
SNMP OID:MIB値を登録。ここでは、UCD-SNMP-MIB::ssCpuIdle.0を取得しています
SNMPコミュニティ:設定しているSNMPのコミュニティ値。デフォルトはpublic
SNMPポート:SNMPのポートはデフォルトは161です
キー:全体を通したユニークな値を記載。判断する為の値で特に決まりはなさそうです
私はいつもOIDをそのまま入れてます
データ型:数値(整数)
データの形式:10進数
単位:%
乗数を使用:チェックなし
更新間隔(秒):ひとまず60にしてます。デフォルトは30
例外の更新間隔(秒):例外の更新間隔はありません
例外の更新間隔の作成:例外設定
ヒストリの保存期間(日):デフォルトは90日
トレンドの保存期間(日):デフォルトは365日
ステータス:有効
保存時の計算:なし
値のマッピングの使用:なし
アプリケーションの作成:なし
アプリケーション:なし

Idleの登録が完了したら続いて計算アイテムを登録します。

ホスト:先ほど設定したホストを選択
説明:分かりやすく「CPU使用率」とかにしてます
タイプ:計算を選択
式:100-last(.1.3.6.1.4.1.2021.11.11.0)
()内は先ほど登録したOIDを入れます。英表記で登録した場合は
100-last(“ssCpuIdle.0”)となります。
lastは直近の値。
データ型:数値(整数)
データの形式:10進数
単位:%
乗数を使用:チェックしない。
更新間隔(秒):30秒。
例外の更新間隔(秒):例外の更新間隔はありません
例外の更新間隔の作成:そのまま。
ヒストリの保存期間(日):90日
トレンドの保存期間(日):365日
ステータス:有効
保存時の計算:なし
値のマッピングの使用:なし
アプリケーションの作成:なし
アプリケーション:なし

これでCPU使用率が分かります。
使用率とIdleと2つ値をとるのでデータ量としては2倍になりますが、
元のIdle値は要らないのであれば保存期間をギリギリまで減らせば
多少は削減できると思います。
Idleは計算用だから1日あれば十分かも!?

—-追記—-
ついでにメモリの使用率についても下記のような計算で取得しています。

実メモリサイズ
UCD-SNMP-MIB::memTotalReal.0(.1.3.6.1.4.1.2021.4.5.0)
実メモリ空き容量:UCD-SNMP-MIB::memAvailReal.0(.1.3.6.1.4.1.2021.4.6.0)
バッファ使用量
UCD-SNMP-MIB::memBuffer.0(.1.3.6.1.4.1.2021.4.14.0)
キャッシュ使用量
UCD-SNMP-MIB::memCached.0(.1.3.6.1.4.1.2021.4.15.0)

計算部分
((last(.1.3.6.1.4.1.2021.4.5.0)-last(.1.3.6.1.4.1.2021.4.6.0)-last(.1.3.6.1.4.1.2021.4.14.0)-last(.1.3.6.1.4.1.2021.4.15.0))/last(.1.3.6.1.4.1.2021.4.5.0))*100

バッファやキャッシュ領域も空きとしています。
%にする為に使用量/最大値*100をしています。

コマンドで添付ファイル付メール送信

コマンドで添付ファイル付メールを送信したいなーという時があると思います。
ないとか言わないで下さい、きっとあります。
調べてみるとuuencodeというものを使えばできるらしい。
sharutilsパッケージに同梱されているようなのでyumでインストールを行います。

[root@cent5 ~]# yum install sharutils
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: centos.mirror.secureax.com
* base: centos.mirror.secureax.com
* extras: centos.mirror.secureax.com
* updates: centos.mirror.secureax.com
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package sharutils.i386 0:4.6.1-2 set to be updated
–> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
sharutils i386 4.6.1-2 base 201 k

Transaction Summary
================================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 201 k
Is this ok [y/N]: y
Downloading Packages:
sharutils-4.6.1-2.i386.rpm | 201 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : sharutils 1/1

Installed:
sharutils.i386 0:4.6.1-2

Complete!
[root@cent5 ~]# uu
uuclient uudecode uuencode uuidgen uuserver

コマンドが表示されたので問題なさそう

さっそく送ってみる

[root@cent5 ~]# uuencode test.log test.log | mail -s ‘test’ test@neko.mydns.jp

問題なくメールは送れました。

スクリプト等で集計したファイルを送ったりできるのは便利ですよね!

squid dnsエラー 「All dnsserver processes are busy」

squidが重いと感じてログを見たら下記のようなdnsプロセス待ちのログが大量にでてました。

Mar 5 10:18:03 neko squid[22918]: WARNING: All dnsserver processes are busy.
Mar 5 10:18:03 neko squid[22918]: WARNING: up to 5 pending requests queued
Mar 5 10:20:12 neko squid[22918]: Consider increasing the number of dnsserver processes to at least 13 in your config file.
Mar 5 10:20:12 neko squid[22918]: dnsSubmit: queue overload, rejecting thumbnail.image.rakuten.co.jp
Mar 5 10:20:13 neko squid[22918]: dnsSubmit: queue overload, rejecting c1.rfihub.net

最近はdnsクエリ要求が多くなってきています。
squidではdnsプロセス数はデフォルト5なのでここをMAXの32まで上げます。
※コンパイルし直せばMAX値は上げれますが待ちが5程度なのでそこまでは必要ないのでしていません。

# vi /usr/local/squid/etc/squid.conf

# TAG: dns_children
# The number of processes spawn to service DNS name lookups.
# For heavily loaded caches on large servers, you should
# probably increase this value to at least 10. The maximum
# is 32. The default is 5.
#
# You must have at least one dnsserver process.
#
#Default:
# dns_children 5
dns_children 32

dns_childrenの値を変更したら再起動します。
# /etc/init.d/squid restart

その後はWORNINGもでなくなり、サクサク動くようになりました。(たぶん)

Xen+CentOS6.3でのディスク領域拡張(LVM編)

Xenの仮想サーバでdisk領域が足りなくなった際の対処と
してサーバへの割り当てサイズを増やす時の手順です。

【前提条件】

ホストOS:Xen
ゲストOS:CentOS6.3
ゲストOSパーティション:LVM
ホストOSのディスク領域は割り当て済みで空きがある

RHELの最近のバージョンであればほぼLVMになっていると思います。
LVM以外の方法はliknux disk領域拡張で記載しています。

まずはXen側のサイズを変更します。
XenCenterを開き該当の仮想サーバをShutDownします。
その後、ストレージがあるVirtualDisksを選択して、仮想サーバのDiskのProertiesから
Size and Locationを開きサイズを変更します。
※停止していないとsizeを変える事ができません。
今回は1300GBから1700GBへ拡張しました。
サイズを変更したらVMを起動します。

Xen側の作業は以上です。
続いてゲストOS側の作業です。

fdiskでlvmのパーティションを作成します。

まずはfdiskで確認
# fdisk -l

Disk /dev/xvda: 1825.4 GB, 1825361100800 bytes
255 heads, 63 sectors/track, 221920 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077127

Device Boot Start End Blocks Id System
/dev/xvda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/xvda2 64 169704 1362634356 8e Linux LVM

Disk /dev/mapper/VolGroup-lv_root: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/VolGroup-lv_swap: 2113 MB, 2113929216 bytes
255 heads, 63 sectors/track, 257 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/VolGroup-lv_home: 1339.5 GB, 1339534868480 bytes
255 heads, 63 sectors/track, 162855 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

/dev/xvdaが1800GBありますが割り当てが53Gと1339Gだけである事がわかります。
注意!!
ここの値はdiskのbytesサイズなのでXen等で設定した値と違うので間違えないように!!

# fdisk /dev/xvda

WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
switch off the mode (command ‘c’) and change display units to
sectors (command ‘u’).

Command (m for help): p  ←パーティションの確認、2番目の/dev/xvda2が今回の対象です。

Disk /dev/xvda: 1825.4 GB, 1825361100800 bytes
255 heads, 63 sectors/track, 221920 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077127

Device Boot Start End Blocks Id System
/dev/xvda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/xvda2 64 169704 1362634356 8e Linux LVM

Command (m for help): d  ←削除
Partition number (1-4): 2  ←パーティション指定

Command (m for help): p  ←対象パーティションが消えている事を確認

Disk /dev/xvda: 1825.4 GB, 1825361100800 bytes
255 heads, 63 sectors/track, 221920 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077127

Device Boot Start End Blocks Id System
/dev/xvda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.

Command (m for help): n  ←新規パーティション作成
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2  ←パーティション指定
First cylinder (64-221920, default 64):   ←Startセクターを指定、全部使うのでdefault指定
Using default value 64
Last cylinder, +cylinders or +size{K,M,G} (64-221920, default 221920):   ←Endセクターを指定、こちらもdefault指定
Using default value 221920

Command (m for help): p  ←空き領域が全部割り当て有られている事を確認します。

Disk /dev/xvda: 1825.4 GB, 1825361100800 bytes
255 heads, 63 sectors/track, 221920 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077127

Device Boot Start End Blocks Id System
/dev/xvda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/xvda2 64 221920 1782059376 83 Linux

Command (m for help): t  ←LVMにする為にsystemidを変更します。
Partition number (1-4): 2  ←パーティション指定
Hex code (type L to list codes): 8e  ←LVMのidを指定、idを確認する場合はCommandでlで一覧がでます。
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p  ←最終チェックをします。

Disk /dev/xvda: 1825.4 GB, 1825361100800 bytes
255 heads, 63 sectors/track, 221920 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077127

Device Boot Start End Blocks Id System
/dev/xvda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/xvda2 64 221920 1782059376 8e Linux LVM

Command (m for help): w  ←書き込みをします。
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
# reboot ←デバイスが使用中だから適用させる為にリブートをします。

リブート完了後、ボリュームの拡張を実施します。
サイズを確認、この時点では何も変わっていません。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
50G 1.2G 46G 3% /
tmpfs 503M 0 503M 0% /dev/shm
/dev/xvda1 485M 30M 430M 7% /boot
/dev/mapper/VolGroup-lv_home
1.2T 1.1T 70G 95% /home

◎物理ボリュームの拡張
サイズの確認
# pvscan
PV /dev/xvda2 VG VolGroup lvm2 [1.27 TiB / 0 free]
Total: 1 [1.27 TiB] / in use: 1 [1.27 TiB] / in no VG: 0 [0 ]
再割り当てを実施
# pvresize /dev/xvda2
Physical volume “/dev/xvda2” changed
1 physical volume(s) resized / 0 physical volume(s) not resized
サイズが大きくなっている事を確認
# pvscan
PV /dev/xvda2 VG VolGroup lvm2 [1.66 TiB / 399.99 GiB free]
Total: 1 [1.66 TiB] / in use: 1 [1.66 TiB] / in no VG: 0 [0 ]

◎論理ボリュームの拡張
サイズの確認
# lvscan
ACTIVE ‘/dev/VolGroup/lv_root’ [50.00 GiB] inherit
ACTIVE ‘/dev/VolGroup/lv_home’ [1.22 TiB] inherit
ACTIVE ‘/dev/VolGroup/lv_swap’ [1.97 GiB] inherit

サイズの再割り当て、400GだとNGだったので399Gにしています。
# lvscan resize -L +399G /dev/VolGroup/lv_home
Extending logical volume lv_home to 1.61 TiB
Logical volume lv_home successfully resized
サイズが変更されている事を確認
# lvscan
ACTIVE ‘/dev/VolGroup/lv_root’ [50.00 GiB] inherit
ACTIVE ‘/dev/VolGroup/lv_home’ [1.61 TiB] inherit
ACTIVE ‘/dev/VolGroup/lv_swap’ [1.97 GiB] inherit

◎ファイルシステムの拡張

対象ボリュームを指定して再割り当てを実施、サイズによっては結構時間がかかります。
# resize2fs /dev/mapper/VolGroup-lv_home
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_home is mounted on /home; on-line resizing required
old desc_blocks = 78, new_desc_blocks = 103
Performing an on-line resize of /dev/mapper/VolGroup-lv_home to 431630336 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_home is now 431630336 blocks long.

無事拡張されました。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
50G 1.2G 46G 3% /
tmpfs 503M 0 503M 0% /dev/shm
/dev/xvda1 485M 30M 430M 7% /boot
/dev/mapper/VolGroup-lv_home
1.6T 1.1T 443G 72% /home

注意!!
拡張は必ず物理→論理→ファイルシステムの順番で実施して下さい。
基本は箱の外側から大きくしていくことです。
外側が広がっていなければ内側が広がる事はないですからね。

KVMのバーチャルサーバが重い

以前もあったのですが、バーチャルサーバのWEBアクセスが明らかに遅い現象が起きました。

サーバ側のシステムリソースを見ても特に高負荷でもなくボトルネックは見当たりませんでした。

どうしたものかと考えていたらホストサーバ側はどうだろう?と思いチェックすると
メモリがswapまで使われている状態でした。

何が使っていたかというと「libvirtd」がほぼメモリを圧迫していました。
仮想化にはkvmを使っているのですがその管理プロセスになります。

なんでこんなに使うんだろ・・・?

ひとまずlibvirtdを再起動
# /etc/init.d/libvirtd restart

メモリが解放されて軽くなりました。

今後、何の作業後に上がるのか、ずっと起動させていると上がるのか
ちょっと経過観察です。

mailコマンドでのメール送信

mailコマンドで動いているサーバがあったのでテストした時のメモです。

コマンドで普通に打つ場合はmailの後に送信先アドレスを入れてやればOK
$ mail test@exmple.com
Subject: test mail
send mail test !!
.
Cc:

一行で終わらせたいなぁという場合は下記のようにするとOK
でも本文は書かなきゃいけないですけど・・・

$mail -s ‘件名’ -c ‘CCで送りたいメールアドレス’ ‘送信先メールアドレス’
send mail test !!
.
Cc:CCで送りたいメールアドレス

あとはシェルに組み込む場合は本文はパイプでmailコマンドに引き渡して下さい。

echo “本文を記入” | mail -d ‘件名’ ‘送信先メールアドレス’