Linux

Linuxのオープンソースの監視ツール

Linuxのシステム監視運用をしていく上で監視は
重要な作業なのだ。
監視で事前にトラブルを防ぐ事もシステムの癖?
みたいな物が見えてくる。
例えば、毎時同じ時間帯に異常なトラフィック量
が増え、調査の後、意味のあるトラフィック増と
分かれば、今後監視の上で除外できるし、トラブル
発生後に監視していたデータでトリガーを追求する
事が出来る事もあるし。
そんな訳で、この間のセミナーでいくつかのオープン
ソースの監視ツールを紹介されたのでメモ書き。

■Nagios(ナギオス)
世界的に良く知られているツールの1つらしい。
(私は使った事ないですけど・・・)
総合的な監視ツールらしく、ホスト数が多くても
対応出来、利用実績が豊富らしい。
まぁ、難点としては少し見にくいらしい。
http://www.nagios.org/

■Hinemos(ヒネモス)
NTTデータが中心になって開発した総合運用ツール
らしい。(ヒネモスを変換して初めて知ったけど、
ヒネモスって終日という意味があるらしい。調べた
ところ、「朝から晩まで続くさま」で、ヒネモスと
名づけたとの事。へぇー。)
エージェント型で専用クライアントツールを利用
するらしい。
JAVAで動作するのでメモリを食うのが難点らしい。
http://www.hinemos.info/

■ZABBIX(ザビックス)
最近注目の総合運用ツールで、シンプルだけど
必要な機能が揃っているツールらしい。
http://www.zabbix.com/

■zither(チーター)
ライブドアが提供する監視ツールらしい。
無料サービス「データホテルパトロール」が
なかなか優れ物らしいが、監視サーバがデータ
ホテル側にあるのでセキュリティポリシー的に
難しいかな。
http://patrol.datahotel.ne.jp/

まぁ、あとは言わずとしれてMRTGとか。

こんな感じかな〜。

| | コメント (14) | トラックバック (0)

Linuxシステム運用

今日はセミナーに行って来た。
そこで学んだ事をメモ書き。

システム運用にも多々あるが、サーバ監視として主に
使われるコマンドが、
死活監視のプロセス監視でpsコマンド、prtreeコマンド
ポートチェックとしてnetstatコマンド
リソース管理のCPU利用状況でtopコマンド、uptimeコマンド
メモリの利用状況は、freeコマンド
ディスクの利用状況は、dfコマンド、iostatコマンド
リソース全体を把握するのは、vmstatコマンドやsarコマンド

いろいろなコマンドがあるが、topコマンドの出力結果の中に
load averageという項目があるが、講師の人から明確にload average
を説明できるのか問われたが。。。明確に説明できない私。

なんとなくCPUの使用率という認識だったけど、正確には
処理を待っているプロセスの平均数。
まぁ、処理待ちのプロセスが少なければいつでもCPUが使用
できるのだから、CPUの使用率という認識で問題ないと思うけど。
処理を待っているプロセスの平均数が常に高い数値(5とか6)を
示している場合、処理待ちの状態が継続している状態で
システム的には宜しくない状態という事。

ちなみに、macで取得したtopコマンドの出力結果は・・・
↓こんな感じ。まぁ、問題ないなー。

Processes:  53 total, 2 running, 51 sleeping... 161 threads            23:15:48
Load Avg:  0.15, 0.17, 0.11     CPU usage:  2.3% user, 5.4% sys, 92.3% idle 
SharedLibs: num =  135, resident = 28.1M code, 4.01M data, 7.48M LinkEdit
MemRegions: num =  5031, resident =  149M + 14.2M private,  106M shared
PhysMem:   178M wired,  166M active,  347M inactive,  693M used,  330M free
VM: 7.41G + 81.5M   37612(0) pageins, 0(0) pageouts

  PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS RPRVT  RSHRD  RSIZE  VSIZE
  313 top         10.1%  0:37.11   1    18    20   632K   840K  2.49M  27.0M
  307 csh          0.0%  0:00.02   1    15    19   408K  1.04M  1.46M  31.1M
  305 bash         0.0%  0:00.01   1    14    16   220K  1.21M  1.27M  27.1M
  304 login        0.0%  0:00.01   1    16    40   176K   920K  1.88M  26.9M
  302 Terminal     0.8%  0:02.23   4    95   185  3.09M  15.4M  17.9M+  358M
  301 nmbd         0.0%  0:00.13   1    14    23   260K  1.38M  3.38M  27.7M
  298 firefox-bi   0.2%  0:55.45   7   131   394  54.3M  40.6M  87.5M   482M
  297 Preview      0.0%  0:00.58   2    93   187  2.63M  11.1M  14.8M   355M
  291 System Eve   0.0%  0:00.26   1    60   105  1.34M  3.96M  8.89M   328M
  288 LAServer     0.0%  0:15.19   1    58   149  26.5M  11.0M  40.2M   396M
  287 usbmuxd      0.0%  0:00.01   2    20    21   176K   792K  1.79M  27.0M
  285 LCCDaemon    0.0%  0:00.40   3    98   157  2.32M  6.92M  12.5M   340M
  284 DevDetectL   0.0%  0:00.81   2    68   120  4.34M  9.32M  19.3M   400M
  283 UniversalA   0.2%  0:01.48   1    62   112  1.34M  4.04M  9.82M   333M
  282 iTunesHelp   0.0%  0:00.07   2    55   100   636K  3.09M  4.32M   324M
  280 Finder       0.0%  0:00.85   3   115   207  3.77M  20.9M  18.8M   375M
  278 SystemUISe   0.0%  0:02.79   2   207   228  4.19M  11.1M  16.9M   358M
  277 Dock         0.0%  0:00.34   2    96   144  1016K  13.3M  10.2M   337M
  276 mdimport     0.0%  0:00.32   3    60    50   988K  3.41M  9.05M  39.1M
  270 pbs          0.0%  0:00.31   2    53    44   764K  3.45M  5.79M  54.4M
  269 TabletDriv   0.0%  0:00.19   3    87    87   972K  3.73M  7.78M   325M
  268 mdimport     0.0%  0:00.18   3    60    43   836K  2.91M  6.75M  38.6M
  253 automount    0.0%  0:00.01   3    39    30   308K  1.30M  1.09M  28.7M

| | コメント (0) | トラックバック (0)

Linuxにtelnet接続ができない

今日仕事の合間に職場の上司からLinuxをインストール
したけど、リモートからtelnetができないけど、原因
が分からないんだよねーと相談を受けた。
(内心、相談されたと言うよりは私に対する力量調査か、
私に教育をしてくれているのかもしれない。なんて、
思いながら調べてみる。)

1.
まず、確かにリモート(Windows)からLinuxにtelnet
ができないのかを確認。→できない。

2.
Linuxにターミナルで接続してローカルからtelnet
でログインできる事を確認。→できる。

3.
Linuxからデフォルトゲートウエイ、Windows側のIP
アドレスにpingしてみる。→応答が返る。

4.
wrapperの設定では?と思い、/etc/hosts.allowを確認。
→ALL:ALLで許可されている。

5.
念のため、telnetのport(TCP23)がnetstatでリッスン
状態なのか確認。→リッスン状態になっている。

6.
「/etc/xinetd.d/telnet」のdisableは始めから
「no」に設定されている。
→/etc/inetd.confは存在しない。

7.
hosts.allowを念の為に、
in.telnet *.*.*. で接続を許可してみる。
→状況変わらず。

8.
nameserverが設定されていないので、設定して
みる。→状況変わらず。

9.
psコマンドでxinetdが起動しているのか、確認。
→起動している。
念のため、xinetdを再起動してみて、状況を
確認してみる。→状況変わらず。

10.
Linuxのファイヤーウォール(iptables)が原因なのか、
サービスを停止してみる。(service iptables stop )
→リモートホストからLinuxへのtelnet接続成功。

原因:Linuxのファイヤーウォールが通信をブロック
していた事が判明。

→上司に接続できるようになった事を報告。
上司も接続できたとの事。。。
もう少し早く解決できても良かったと思う。。。

参考URL
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/

| | コメント (0) | トラックバック (0)

LPI コマンド履歴

1度使ったコマンドをもう1度使ったり、一部だけ変更して
使いたい場合は、bashの履歴機能を利用。

プロンプトが出ている状態で↑キー、(又はCtrl + Pキー)
を押すと実行したコマンドが最近実行したものから表示
される。

historyコマンドを使うと、コマンド履歴が順に表示される。
古いものから順に番号が付く。

$ history
    1    ls
    2    cat .profile
    3    vi .profile

履歴番号が3のコマンドを実行するには、履歴番号の前に
[ ! ]を付けて、実行する。

$ !3

コマンド履歴は、ユーザのホームディレクトリにある
.bash_historyファイルに保存される。
このファイルは、環境変数HISTFILEによって変更可能。
履歴を残す数は、環境変数HISTSIZEで設定される。
デフォルトは、500となっている。


| | コメント (0) | トラックバック (0)

LPI 引用府

■ [ ' ] 単一引用府(シングルクォーテーション)
単一引用府の中は、全て文字列であると解釈される。

■ [ " ]二重引用府(ダブルクォーテーション)
二重引用府内に変数があれば、その変数の内容が
展開される。
また、二重引用府内にバッククォーテーション[ ' ]
が使われていると、その中も展開される。

[例]

$ echo $DATE
8月31日 ←環境変数DATEの内容が表示される。
$ echo '$DATE'
$DATE ←文字列$DATEが出力される
$ echo "今日の日付は$DATEです。"
今日の日付は8月31日です。 
↑二重引用府内の環境変数DATEの内容も表示される。

展開させたくない場合、例えば$記号をそのまま使いたい
場合は、バックスラッシュ[\]を使う。
バックスラッシュ直後の文字は、全て文字であると判断
される。
これを「エスケープシーケンス」と言う。

[例]

$ echo "変数\$DATEの内容は「$DATE」です。"
変数$DATEの内容は「8月31日」です。
↑バックスラッシュの後ろに$DATEがある為、環境変数と
みなされず、文字列として出力される。


(注)ここでは全角のバックスラッシュを使っているが、
半角のバックスラッシュを利用する。


■[ ` ]バッククォーテーション
引用府内にコマンドがあれば、そのコマンド実行した結果
が展開される。
また変数の場合は、変数に格納されているコマンドを実行
した結果が展開される。

[例]

$ echo "カレントディレクトリは、`pwd` です。"
カレントディレクトリは、/home/hogehogeです。
↑バッククォーテーション内のコマンドの結果が出力される。

| | コメント (0) | トラックバック (0)

テープデバイスの状況確認とテープ書き込みの流れ

■デバイスの認識
Linuxシステムが正常にデバイスを認識しているかどうかを
確認するには、/proc以下を確認する。
例えば、SCSI接続のデバイスであれば、/proc/scsi/scsiを
確認すると該当するテープデバイスが表示されるはず。

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 06 Lun: 00
  Vendor: ARCHIVE  Model: Python 06408-XXX Rev: 8071
  Type:   Sequential-Access                ANSI SCSI revision: 03

例えばIDE接続のテープデバイスをプライマリのスレーブ
(/dev/hdb)に接続している場合は、/proc/ide/hdbディレクトリ
以下のファイルを確認する。
mediaファイルには「tape」、modelファイルには「製品名」
が表示される。

# cat /proc/ide/hdb/media
tape
# cat /proc/ide/hdb/model
Seagate STT20000A

■テープデバイスの認識

Linuxでテープを操作するには、mtコマンドを利用する。

挿入されているテープのステータスを確認
#mt -f /dev/st0 status
テープの現在のブロック位置を示す
#mt -f /dev/st0 tell
テープを先頭まで巻き戻す
#mt -f /dev/st0 rewind

詳細なコマンド操作方法は、こちらへ。

■テープに書き込み

挿入されているテープのステータスを確認
#mt -f /dev/st0 status
テープの中身を確認
#tar tvf /dev/st0
巻き戻しする
#mt -f /dev/st0 rewind
ホームディレクトリのtestデータの書き込み
#tar cvf /dev/st0 /home/heigi/test
中身を確認して、巻き戻し
#tar tvf /dev/st0
#mt -f /dev/st0 rewind
テープの排出
#mt -f /dev/nst0 offline

※Linuxではデバイスが/dev/st0
※Solarisではデバイスが/dev/rmt/0n

| | コメント (0) | トラックバック (0)

LPI コマンドの実行

コマンドは、次のような要素から成り立つ。

コマンド オプション 引数

■複数のコマンドの実行制御

コマンド         説明
----------------------------------------------------------
コマンド1;コマンド2   コマンド1に続いてコマンド2を実行
[例] pwd ; ls
----------------------------------------------------------
コマンド1&&コマンド2   コマンド1が正常終了した時のみ
[例] pwd && ls        コマンド2を実行
----------------------------------------------------------
コマンド1 || コマンド2   コマンド1が正常終了しなかった場合
                                のみコマンド2を実行
[例] grep LPIC file.log || echo "LPIC not found in file.log"
----------------------------------------------------------
(コマンド1;コマンド2)  一纏まりのコマンドグループとして実行
[例] (date; pwd; ls) > kekka.log
----------------------------------------------------------
{コマンド1;コマンド2}  現在のシェル内でコマンドを実行
----------------------------------------------------------

| | コメント (0) | トラックバック (0)

LPI 環境変数PATH

コマンドには内部コマンド(シェル自体に組み込まれているもの)
外部コマンド(独立したプログラムとして存在するもの)の
2種類存在する。

パスの通っていない場所に置かれているコマンドやプログラム
を実行する場合、絶対パス(フルパス)を指定する必要がある。
絶対パスは、最上位のディレクトリ( / )から表記する方法。
相対パスは、カレントディレクトリ( . )を基点とした相対位置で
表記する方法。

一般ユーザの環境変数PATHにパスを追加するには、.bash_profile
などの環境設定ファイルのPATH設定を修正するか、以下方法で
環境変数PATHを追加する。

■環境PATHの追加書式

$ PATH=$PATH:追加するディレクトリ名

(例) /mydir ディレクトリを環境変数PATHの最後に追加

$ PATH=$PATH:/mydir

※シェルは、環境変数PATHの先頭からディレクトリを検索する。
もし同名のプログラムがあった場合は、環境変数PATHの先頭に
近いほうのディレクトリに置かれているプログラムを実行する。

$ PATH=/mydir

上記のようにすると、パスが通っているディレクトリは/mydir
だけになってしまい、外部コマンドが使えなくなる。(フルパス
で指定すれば使える。)

※通常、セキュリティの理由から環境変数PATHにはカレント
ディレクトリを含みません。その為、カレントディレクトリに
あるプログラムを実行する時には、カレントディレクトリを
意味する[ . ] をつけた形式でコマンドを実行する。

(例) カレントディレクトリにあるmycommandを実行した場合

$ ./mycommand

| | コメント (0) | トラックバック (0)

LPI シェル変数と環境変数

bashシェルの基本的なユーザ設定は、ユーザのホームにある
.profileファイル、.bash_profileファイル、.bashrcファイル
行う。
.profileファイル、.bash_profileファイルは、ログイン時に1回
だけ読み込まれるのに対して、.bashrcファイルは起動する
たびに読み込まれる。

環境変数とは、その変数を定義したシェル上及びそのシェル
で実行されるプログラムからも参照する事のできる変数です。

■変数を定義する書式

変数名=値

指定する際の[=]の前後にスペースが入らないように注意する。
定義された変数はechoコマンドを使って参照ができる。
変数を指定する場合は、変数名の先頭に[$]をつける。

■echoコマンドの書式

echo [文字列又は$変数名]

例えば、echoコマンドに変数lpiを指定すると

$ lpi='Linux Professional Institute'
$ echo $lpi
Linux Professional Institute

変数を削除する場合は、unsetコマンドを使う。

■unsetコマンドの書式

unset 変数名

先ほどセットした変数lpiを削除する場合

$ unset lpi

削除する場合は、変数名の先頭に[$]はつけない。
定義されている環境変数の一覧表示にはenvコマンド
環境変数とシェル変数を両方表示するにはsetコマンド
を使う。
シェル変数は新たに起動したbashからは参照できないが、
exportコマンドでエクスポートする事で参照できるようになる。

■exportコマンドの書式

export 変数名


削除する時と同様、変数名の先頭に[$]はつけない。

以下は、シェル変数と環境変数の違いを確認している。

$ VAR=lpic        ←VAR変数を定義
$ echo $VAR    ←VAR変数をecho
lpic                        ←[lpic]が出力される
$ bash                  ←bashを新たに起動
$ echo $VAR    ←VAR変数をecho

                            ←定義されていない為、何も出力されない
$ exit                   ←新たに起動したbashを終了
$ export VAR    ←VAR変数をエクスポート
$ bash                  ←bashを新たに起動
echo $VAR    ←VAR変数をecho
lpic                        ←新たに起動したbashでも[lpic]が出力される

エクスポートと変数定義を1行で書く事も可能。

$ export VAR=lpic

| | コメント (0) | トラックバック (0)

LPI bashシェルの基本的キー操作

■bashシェルの基本操作
-------------------------------------------------------
操作                        説明
-------------------------------------------------------
Tabキー                        コマンドやディレクトリ名を補完
-------------------------------------------------------
Ctrl+Aキー                  行の先頭へカーソルを移動
-------------------------------------------------------
Ctrl+Eキー                    行の最後へカーソルを移動
-------------------------------------------------------
Ctrl+Dキー                    カーソル部分を1文字削除
-------------------------------------------------------
Ctrl+Hキー                    カーソルの左1文字削除
-------------------------------------------------------
Ctrl+Lキー                    画面をクリアしてカレント行を再表示
-------------------------------------------------------
Ctrl+Cキー                    処理を中断
-------------------------------------------------------
Ctrl+Sキー                    画面への出力を停止
-------------------------------------------------------
Ctrl+Qキー                    画面への出力を再開
-------------------------------------------------------
Ctrl+Zキー                    処理を一時停止(サスペンド)
-------------------------------------------------------

| | コメント (0) | トラックバック (0)