メモのページ - チラシの裏メモ 3枚目

通信技術や気になった事を黙々とメモし続ける

Alpine Linuxの保守用コマンド

RHELやCentOS等で実行される保守用のコマンドをAlpine Linuxで実行する事が可能であるか、個人用の環境にて稼働しているFTPサーバで確認してみた。
コマンドのオプションや出力内容はRHELやCentOS、Ubuntu等と微妙に異なっているが、これらの主要ディストリビューションと遜色無く実行可能である事は分かった。
Dockerのコンテナ用としてよく利用されているAlpine Linux。WebサーバやFTPサーバとしての商用環境への導入事例は分からないが個人用の環境であれば、サーバ用としての利用は有りなのではないか。
...という事で、今回は保守でよく使うコマンドをAlpine Linuxで打ってみた際のメモ。


当方の環境
シェルはデフォルトのashからbashに変更している。
bashへの変更方法は以下のリンク先内下部の"ashではなくbashのコマンドを打ちたい"を参照。
https://debslink.hatenadiary.jp/entry/20200418/1587204948
また、当記事に記載したコマンドは全てAlpine Linux 3.14.2 (x86_64)で実行している。

$ uname -a
Linux xxxxxxxxx 5.10.61-0-virt #1-Alpine SMP Fri, 27 Aug 2021 05:29:55 +0000 x86_64 Linux
$
$ cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.14.2
PRETTY_NAME="Alpine Linux v3.14"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
$
$ apk info bash
bash-5.1.4-r0 description:
The GNU Bourne Again shell

bash-5.1.4-r0 webpage:
https://www.gnu.org/software/bash/bash.html

bash-5.1.4-r0 installed size:
1296 KiB
$



収録コマンド
コマンドの概要および当ページ内のCtrl + Fキー検索用。
1.サービスの確認
 rc-service:サービスの管理。systemdコマンドのOpenRC版。
 rc-status:サービスの状態確認。systemdコマンドのOpenRC版。
 rc-update:サービスの自動起動の有効・無効化。systemdコマンドのOpenRC版。
2.プロセスの確認
 ps:現段階で動作中のプロセスを確認。
 top:動作中のプロセスを継続的に監視。
 lsof:現段階で開いているファイルを確認。
 vmstat:仮想メモリの統計情報の確認。
 pidstat:プロセスの各種リソースの消費状況の確認。
 mpstat:システム内全てのプロセッサーのパフォーマンスを確認。
 sar:CPUやメモリやネットワークやI/O等の負荷状況を確認。
3.ディスクの確認
 df:ディスクの空き容量を確認。
 iotop:ディスクI/Oの帯域をプロセス毎に確認。
 iostat:ディスクI/OおよびCPUの消費状況を確認。
 mount:ディスクのマウント状況を確認。
4.メモリの確認
 free:メモリの消費状況を確認。
5.ネットワークの確認
 ping:接続先に対しネットワーク層までの疎通確認。
 traceroute:接続先までの経路状況の確認。
 ifconfig:NICの構成に関する確認。
 netstat:接続状況や経路情報の確認。
 curl:接続先に様々なリクエストを送信し接続状況を確認。
 test-NetConnection:curlのWindows版のようなツール。
6.時刻同期の確認
 chronyc:chronyが自身の時刻同期先(NTPサーバなど)と同期が取れているかを確認。
7.最後の手段
 reboot:システムの再起動。
 
 
保守用ツールのインストール
デプロイ直後はいくつかの保守用コマンドはインストールされていない為、改めてインストールする必要が有る。
インストールは管理者権限で実行する。

当記事で挙げたコマンドを実行するには、以下のコマンドを実行しパッケージのインストールが必要となる。

# apk add lsof sysstat procps iotop mtr net-tools bind-tools iptables strace


当方の/etc/apk/repositoriesファイルの内容は以下のとおりである。
デプロイ直後は http://dl-cdn.alpinelinux.org/alpine/v3.14/mainのみ有効になっている為、
上記のツールをインストールする為には、
http://dl-cdn.alpinelinux.org/alpine/v3.14/communityhttp://dl-cdn.alpinelinux.org/alpine/edge/testingの行頭のコメントアウトを外す必要が有る。

#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.14/main
http://dl-cdn.alpinelinux.org/alpine/v3.14/community
#http://dl-cdn.alpinelinux.org/alpine/edge/main
#http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing


1.サービスの確認
rc-serviceコマンド
Alpine LinuxのInitシステムはOpenRCが採用されている。OpenRCではサービスの管理はrc-statusとrc-serviceコマンドを使用する。rc-statusコマンドで確認対象のサービスの稼働状況を確認し、rc-serviceコマンドでサービスの起動・停止・再起動を実行する。
rc-statusコマンドとrc-serviceコマンドは管理者権限で実行する。
Red HatやDebian等のような主要なディストリビューションで導入されているsystemctlコマンド程ではないが、サービスの確認や管理が出来る。
ここでは、例としてFTPサーバ(vsftpd)を対象とする。

vsftpdサービスの状態を確認。startedと出力された為、vsftpdは起動している事が分かる。

# rc-service vsftpd status
 * status: started


vsftpdサービスを手動で停止する。停止させた際はstop等の出力は無い。

# rc-service vsftpd stop
 * Stopping vsftpd ...


vsftpdサービスを手動で立ち上げる。正常に立ち上がれば[ ok ]が出力される。

# rc-service vsftpd start
 * Starting vsftpd ...                                                         [ ok ]


vsftpdサービスを再起動させる。正常に再起動が完了すれば[ ok ]が出力される。

# rc-service vsftpd restart
 * Stopping vsftpd ...
 * Starting vsftpd ...                                                         [ ok ]

 
rc-statusコマンド
rc-statusコマンドで今稼働中のサービスの一覧を出力する。

# rc-status
Runlevel: default
 crond                                                                   [  started  ]
 acpid                                                                   [  started  ]
 chronyd                                                                 [  started  ]
 vsftpd                                                                  [  started  ]
 sshd                                                                    [  started  ]
Dynamic Runlevel: hotplugged
Dynamic Runlevel: needed/wanted
 sysfs                                                                   [  started  ]
 fsck                                                                    [  started  ]
 root                                                                    [  started  ]
 localmount                                                              [  started  ]
Dynamic Runlevel: manual

 
rc-updateコマンド
rc-update addコマンドでvsftpdサービスの自動起動を有効にする。

# rc-update add vsftpd
 * service vsftpd added to runlevel default
# 

rc-update delコマンドでvsftpdサービスの自動起動を無効にする。

# rc-update del vsftpd
 * service vsftpd removed from runlevel default
#

rc-update addコマンドで、ランレベル指定でvsftpdサービスの自動起動を有効にする。
Alpine Linuxのランレベルに関しては以下のリンク先を参照。
https://wiki.alpinelinux.org/wiki/OpenRC

# rc-update add vsftpd default
 * service vsftpd added to runlevel default
# 

 
 
2.プロセスの確認
psコマンド
動作中のプロセスを確認する。
Alpine Linuxの場合、procpsパッケージのインストール前後で出力内容が異なり、procpsパッケージのインストール後は出力される項目が増えるだけでなくpsコマンドのオプションも一通り付ける事が出来るようになる為、Alpine LinuxをRed HatやUbuntu等のようにサーバ用として運用するのであればprocpsパッケージのインストールをお勧めする。
以下はprocpsインストール前の出力内容。auxfオプション付けてこの出力内容である。

$ ps auxf
PID   USER     TIME  COMMAND
    1 root      0:00 /sbin/init
    2 root      0:00 [kthreadd]
    3 root      0:00 [rcu_gp]
    4 root      0:00 [rcu_par_gp]
:


以下はprocpsのインストール後の出力内容。
ちなみにauxfオプションを付けて実行すると、プロセスの親子関係が分かりやすく出力される。
自分はpstreeよりps auxfの方が好みである。

$ ps auxf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    09:57   0:00 [kthreadd]
root         8  0.0  0.0      0     0 ?        I<   09:57   0:00  \_ [mm_percpu_wq]
root         7  0.0  0.0      0     0 ?        I    09:57   0:00  \_ [kworker/u2:0-events_unbound]
root         4  0.0  0.0      0     0 ?        I<   09:57   0:00  \_ [rcu_par_gp]
root         3  0.0  0.0      0     0 ?        I<   09:57   0:00  \_ [rcu_gp]
root         6  0.0  0.0      0     0 ?        I<   09:57   0:00  \_ [kworker/0:0H-events_highpri]
root        12  0.0  0.0      0     0 ?        S    09:57   0:02  \_ [migration/0]
root        11  0.0  0.0      0     0 ?        I    09:57   0:01  \_ [rcu_sched]
root         9  0.0  0.0      0     0 ?        S    09:57   0:00  \_ [rcu_tasks_trace]
root        10  0.0  0.0      0     0 ?        S    09:57   0:00  \_ [ksoftirqd/0]
root        14  0.0  0.0      0     0 ?        S    09:57   0:00  \_ [cpuhp/0]
:

 
topコマンド
実行中のプロセスを、CPU利用率が高い順に出力される。
topの出力から抜けるには、Ctrl + cを打つ。
更新間隔1秒で出力する。

topコマンドを打った際に「'xterm-16color': unknown terminal type.」が返ってきてtopコマンドの結果が正常に出力されない場合。
自分の環境では、.bash_profileにTERM=linuxの追記と exportの行にTERMを追記し、再ログインの後topコマンドを実行したら解消した。

$ top -d 1

top - 13:47:06 up 21 min,  0 users,  load average: 0.00, 0.00, 0.00
Tasks:  69 total,   1 running,  68 sleeping,   0 stopped,   0 zombie
%Cpu0  :   0.0/0.0     0[                              ]
GiB Mem : 11.5/0.5      [                              ]
GiB Swap:  0.0/0.9      [                              ]

  PID USER      PR  NI    VIRT    RES  %CPU  %MEM     TIME+ S COMMAND
    1 root      20   0    1.6m   0.8m   0.0   0.2   0:00.31 S /sbin/init
 1824 root      20   0    1.6m   0.1m   0.0   0.0   0:00.00 S  `- /sbin/udhcpc -b -R -p /var/run/udhcpc.eth0.pid -i et+
 1900 root      20   0    1.6m   0.1m   0.0   0.0   0:00.02 S  `- /sbin/syslogd -t
 1953 root      20   0    1.6m   0.0m   0.0   0.0   0:00.00 S  `- /sbin/acpid
:


dオプションで更新間隔を秒で指定可能、-nオプションで出力回数を指定する。
出力中に f で出力内容を変更。bオプションにより、出力中はキー操作を受け付けない。

$ top -b -d 2 -n 10

top - 13:49:25 up 23 min,  0 users,  load average: 0.00, 0.00, 0.00
Tasks:  69 total,   1 running,  68 sleeping,   0 stopped,   0 zombie
%Cpu0  :   0.5/0.5     1[                              ]
GiB Mem : 11.5/0.5      [                              ]
GiB Swap:  0.0/0.9      [                              ]

  PID USER      PR  NI    VIRT    RES  %CPU  %MEM     TIME+ S COMMAND
    1 root      20   0    1.6m   0.8m   0.0   0.2   0:00.31 S /sbin/init
 1824 root      20   0    1.6m   0.1m   0.0   0.0   0:00.00 S  `- /sbin/udhcpc -b -R -p /var/run/udhcpc.eth0.pid -i et+
 1900 root      20   0    1.6m   0.1m   0.0   0.0   0:00.02 S  `- /sbin/syslogd -t
 1953 root      20   0    1.6m   0.0m   0.0   0.0   0:00.00 S  `- /sbin/acpid
:

 
lsofコマンド
プロセスが開いているファイルのリストを出力する。
管理者権限で実行する。
ユーザがどのファイルを開いているか、特定のプロセスがどのファイルを使用しているか、特定のファイルを使用しているプロセスは何か、待ち受け状態のポートや通信中のポートは何か...等、ファイルを開いている物or者を確認出来る。
※Alpine Linuxではlsofを別途インストールすると実行可能になる。(apk add lsof)

出力対象のプロセスIDを指定し出力する。プロセスIDはpsコマンドやpstreeコマンドで確認する。

# lsof -p 2073
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2073 root  cwd    DIR    8,3     4096    2 /
sshd    2073 root  rtd    DIR    8,3     4096    2 /
sshd    2073 root  txt    REG    8,3   797816 1614 /usr/sbin/sshd
sshd    2073 root  mem    REG    8,3   100168  337 /lib/libz.so.1.2.1
:


出力対象のユーザ名を-uオプションで指定し出力する。

# lsof -u hechtia
COMMAND  PID    USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
sshd    2132 hechtia  cwd    DIR                8,3     4096      2 /
sshd    2132 hechtia  rtd    DIR                8,3     4096      2 /
sshd    2132 hechtia  txt    REG                8,3   797816   1614 /usr/sbin/sshd
sshd    2132 hechtia  mem    REG                8,3   100168    337 /lib/libz.so.1.2.11
:


出力対象のプロセス名を-cオプションで指定し出力する。

# lsof -c sshd
COMMAND  PID    USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
sshd    2073    root  cwd    DIR                8,3     4096     2 /
sshd    2073    root  rtd    DIR                8,3     4096     2 /
sshd    2073    root  txt    REG                8,3   797816  1614 /usr/sbin/sshd
sshd    2073    root  mem    REG                8,3   100168   337 /lib/libz.so.1.2.11
:


ファイルやパーティションを指定し出力する。

# lsof /bin/bash
COMMAND  PID    USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    2133 hechtia txt    REG    8,3   760136 130312 /bin/bash
bash    2340 hechtia txt    REG    8,3   760136 130312 /bin/bash
bash    2450    root txt    REG    8,3   760136 130312 /bin/bash
 
# lsof /dev/sda3
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1    root  cwd    DIR    8,3     4096      2 /
init         1    root  rtd    DIR    8,3     4096      2 /
init         1    root  txt    REG    8,3   829000 130314 /bin/busybox
init         1    root  mem    REG    8,3   604744     18 /lib/ld-musl-x86_64.so.1
:


LISTENしてるプロセスを-iでポート指定し出力する。
LISTENは他の機器(サーバやNW機器、PC等)からの接続を待ち受けしている状態である事を示す。
ESTABLISHEDは他の機器と通信中の状態である事を示す。

# lsof -i:22
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2073    root    3u  IPv4  10031      0t0  TCP *:ssh (LISTEN)
sshd    2073    root    4u  IPv6  10033      0t0  TCP *:ssh (LISTEN)
sshd    2128    root    4u  IPv4  10203      0t0  TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)
sshd    2132 hechtia    4u  IPv4  10203      0t0  TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)


iオプションで192.168.1.10からの接続を指定し出力する。

# lsof -i@192.168.3.10
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2128    root    4u  IPv4  10203      0t0  TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)
sshd    2132 hechtia    4u  IPv4  10203      0t0  TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)


iオプションでTCP接続を対象に出力する。

# lsof -iTCP
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2073    root    3u  IPv4  10031      0t0  TCP *:ssh (LISTEN)
sshd    2073    root    4u  IPv6  10033      0t0  TCP *:ssh (LISTEN)
sshd    2128    root    4u  IPv4  10203      0t0  TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)
sshd    2132 hechtia    4u  IPv4  10203      0t0  TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)


uオプションでユーザを指定し、/homeディレクトリ配下で開いているファイルを出力 (-aはANDと同じ意味)

# lsof -u hechtia -a +D /home/hechtia
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1933 hechtia  cwd    DIR    8,3     4096 1979 /home/hechtia
bash    2074 hechtia  cwd    DIR    8,3     4096 1979 /home/hechtia
vim     2076 hechtia  cwd    DIR    8,3     4096 1979 /home/hechtia
vim     2076 hechtia    4u   REG    8,3    12288  102 /home/hechtia/.bashrc.swp

 
vmstatコマンド
物理メモリや仮想メモリ、ディスクI/O、割り込み回数、コンテキストスイッチ回数、CPUの消費状況等の統計情報を出力する。
vmstatのvmとはvirtual memory(仮想メモリ)を指すが、物理メモリやディスクも何故か出力される。
※Alpine Linuxでは別途procpsをインストールすると実行可能になる。(apk add procps)

メモリとCPUの統計情報を、3秒間隔で更新し出力する。
3秒毎に出力行が1行づつ増えていく。

$ vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 446572   4416  29120    0    0    18     2  103   34  7  6 87  0  0
 0  0      0 446440   4424  29112    0    0     0     5  112    9  1  1 98  0  0
 0  0      0 446472   4424  29112    0    0     0     0  111   21  3  2 95  0  0


ディスクの統計情報を3秒間隔で5回、そしてtオプションを付けて実行日時も合わせて出力する。

$ vmstat -t -d 3 5
disk- ------------reads------------ ------------writes----------- -----IO------ -----timestamp-----
       total merged sectors      ms  total merged sectors      ms    cur    sec                 UTC
sda     1122    435   66526    3602    322    319   10482    3889      0     15 2021-10-24 15:16:45
loop0      0      0       0       0      0      0       0       0      0      0 2021-10-24 15:16:45
loop1      0      0       0       0      0      0       0       0      0      0 2021-10-24 15:16:45
loop2      0      0       0       0      0      0       0       0      0      0 2021-10-24 15:16:45
:

 
pidstatコマンド
プロセス毎にCPUやメモリやディスク等の消費状況を出力する。
また、pidstatコマンドの実行間隔や回数を指定すると、pidstatの実行中ににどのプロセスがどの程度リソースを利用したか統計情報を出力する事が出来る。
しかもデフォルトで実行時間を出力してくれる為、バックグラウンドでpidstatを実行しどのタイミングでどのプロセスがCPUやメモリ等を多く消費していたか確認が出来る。
※Alpine Linuxでは別途sysstatをインストールすると実行可能になる。(apk add sysstat)

CPUの消費状況をプロセス毎に、2秒間隔で5回出力する。

$ pidstat 2 5
Linux 5.10.61-0-virt (jpmtkvmftp99)     10/24/21        _x86_64_        (1 CPU)

14:10:34      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
14:10:36        0       960    0.00    0.50    0.00    0.00    0.50     0  jbd2/sda3-8

14:10:36      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
14:10:38     1000      2599    0.50    0.00    0.00    0.00    0.50     0  pidstat

14:10:38      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
14:10:40        0       841    0.00    0.50    0.00    0.00    0.50     0  kworker/0:2-events_power_efficient

14:10:40      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command

14:10:42      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
14:10:44     1000      2599    0.50    0.00    0.00    0.00    0.50     0  pidstat

Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        0       841    0.00    0.10    0.00    0.00    0.10     -  kworker/0:2-events_power_efficient
Average:        0       960    0.00    0.10    0.00    0.00    0.10     -  jbd2/sda3-8
Average:     1000      2599    0.20    0.00    0.00    0.00    0.20     -  pidstat


メモリの消費状況をプロセス毎に、2秒間隔で5回出力する。

$ pidstat -r 2 5
Linux 5.10.61-0-virt (jpmtkvmftp99)     10/24/21        _x86_64_        (1 CPU)

14:11:14      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
14:11:16     1000      2603     30.85      0.00    1612    1356   0.27  pidstat
14:11:16        0      2604     16.42      0.00    1588       4   0.00  getty

14:11:16      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
14:11:18     1000      2603      2.50      0.00    1612    1368   0.28  pidstat

14:11:18      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
14:11:20     1000      2603      2.00      0.00    1612    1368   0.28  pidstat

14:11:20      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
14:11:22     1000      2603      1.00      0.00    1612    1368   0.28  pidstat

14:11:22      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
14:11:24     1000      2603      2.00      0.00    1612    1368   0.28  pidstat

Average:      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
Average:     1000      2603      7.69      0.00    1612    1366   0.27  pidstat
Average:        0      2604      3.30      0.00    1588       4   0.00  getty


ディスクI/Oの状況を2秒間隔で5回出力する。
ただし、I/Oが無い時は値が出力されない。

$ pidstat -d 2 5
Linux 5.10.61-0-virt (jpmtkvmftp99)     10/24/21        _x86_64_        (1 CPU)

14:12:09      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

14:12:11      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

14:12:13      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

14:12:15      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

14:12:17      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

Average:      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

 
mpstatコマンド
マルチコアなCPUのCPU消費状況を出力する。
CPU毎にに使用率や割り込みを出力する。オプションでCPUのコア毎の出力や実行間隔や回数を指定する事により、どのコアが多く使用されているか、どのコアで割り込み処理が多く発生しているか等の情報を出力する事が出来る。
※Alpine Linuxでは別途sysstatをインストールすると実行可能になる。(apk add sysstat)

ALLオプション無しで実行した場合は、全コアでの消費状況を出力する。

$ mpstat 2 10
Linux 5.4.99-0-virt (jpmtkvmftp99)      04/22/21        _x86_64_        (1 CPU)
 
20:22:51     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20:22:53     all    0.45    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.55
20:22:55     all    2.74    0.00    1.37    0.46    0.00    0.46    0.00    0.00    0.00   94.98
20:22:57     all    0.00    0.00    0.91    0.00    0.00    0.46    0.00    0.00    0.00   98.63
:


ALLオプションを付けて実行した場合は、CPUコア毎に消費状況を出力する。

$ mpstat -P ALL 2 10
Linux 5.4.99-0-virt (jpmtkvmftp99)      04/22/21        _x86_64_        (1 CPU)

20:24:59     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20:25:01     all    0.45    0.00    2.27    0.00    0.00    0.00    0.00    0.00    0.00   97.27
20:25:01       0    0.45    0.00    2.27    0.00    0.00    0.00    0.00    0.00    0.00   97.27

20:25:01     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
20:25:03     all    5.48    0.00    3.20    0.00    0.00    0.00    0.00    0.00    0.00   91.32
20:25:03       0    5.48    0.00    3.20    0.00    0.00    0.00    0.00    0.00    0.00   91.32
:

 
sarコマンド
CPUやメモリやネットワーク、I/O等の負荷状況を確認する。
管理者権限で実行する。
sarコマンドは過去ログも確認する事が出来る。
ただし過去ログを確認出来るようにする為には、oオプションを付けてファイルを指定し取得したログをファイルとして残すなど下準備が必要となる為、straceパッケージのインストール直後にsarコマンドを実行しても、過去のログを確認する事は出来ない。
※Alpine Linuxではstraceを別途インストールすると実行可能になる。(apk add strace)

HDDの使用状況を2秒毎に5回出力し、結果を/var/log/sa/sa01.logに保存する。

# sar -b 2 5 -o /var/log/sa/sa01.log
Linux 5.10.82-0-virt (jpmtkvmftp99) 	12/28/21 	_i686_	(1 CPU)

13:30:00          tps      rtps      wtps      dtps   bread/s   bwrtn/s   bdscd/s
13:30:02         0.00      0.00      0.00      0.00      0.00      0.00      0.00
13:30:05         0.00      0.00      0.00      0.00      0.00      0.00      0.00
13:30:07         1.00      0.00      1.00      0.00      0.00     31.84      0.00
13:30:09         0.00      0.00      0.00      0.00      0.00      0.00      0.00
13:30:11         0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         0.20      0.00      0.20      0.00      0.00      6.37      0.00
#


CPUの消費状況を、2秒毎に5回出力する。

# sar -u 2 5
Linux 5.10.82-0-virt (jpmtkvmftp99) 	12/28/21 	_i686_	(1 CPU)

13:32:28        CPU     %user     %nice   %system   %iowait    %steal     %idle
13:32:30        all      0.00      0.00      1.02      0.00      0.00     98.98
13:32:32        all      1.01      0.00      4.55      0.00      0.00     94.44
13:32:34        all      1.52      0.00      4.55      0.00      0.00     93.94
13:32:36        all      0.52      0.00      5.73      0.00      0.00     93.75
13:32:38        all      1.53      0.00      5.61      0.00      0.00     92.86
Average:        all      0.92      0.00      4.29      0.00      0.00     94.80
#


fオプションを付けて、ログファイル/var/log/sa/sa01.logに保存されているHDDの使用状況を確認する。

# sar -b -f /var/log/sa/sa01.log
Linux 5.10.82-0-virt (jpmtkvmftp99) 	12/28/21 	_i686_	(1 CPU)

13:30:00          tps      rtps      wtps      dtps   bread/s   bwrtn/s   bdscd/s
13:30:02         0.00      0.00      0.00      0.00      0.00      0.00      0.00
13:30:05         0.00      0.00      0.00      0.00      0.00      0.00      0.00
13:30:07         1.00      0.00      1.00      0.00      0.00     31.84      0.00
13:30:09         0.00      0.00      0.00      0.00      0.00      0.00      0.00
13:30:11         0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         0.20      0.00      0.20      0.00      0.00      6.37      0.00
#

 
 
3.ディスクの確認
dfコマンド
パーティション情報やディスクの空き容量等を確認する。
管理者権限で実行する。
パーティション情報やファイルタイプ、ディスク容量が出力される。
以下の例では、Tオプションにより各ファイルシステムのタイプを出力、hオプションにより分かりやすい単位で出力。
個々のファイルやサブディレクトリのディスク使用状況を確認したい際は、duコマンドを実行する。

# df -Th
Filesystem           Type            Size      Used Available Use% Mounted on
devtmpfs             devtmpfs       10.0M         0     10.0M   0% /dev
shm                  tmpfs         242.4M         0    242.4M   0% /dev/shm
/dev/sda3            ext4            6.8G    122.6M      6.3G   2% /
tmpfs                tmpfs          97.0M    116.0K     96.9M   0% /run
/dev/sda1            ext4           88.2M     15.4M     65.8M  19% /boot

 
iotopコマンド
プロセス毎にディスクI/Oを出力する。
管理者権限で実行する。
iotopコマンドを打った後は延々と出力され続ける為、Ctrl + cキーを打ってiotopから抜ける。
iotopコマンドにより、ディスクI/O負荷の高いプロセスを特定する事が出来る。
※Alpine Linuxではiotopを別途インストールすると実行可能になる。(apk add iotop)

bオプションによりディスクI/Oを時系列に出力、oオプションにより、ディスクI/Oを発生させたプロセスだけを出力する。

# iotop -b -o
Total DISK READ :       0.00 B/s | Total DISK WRITE :       5.52 K/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:     182.27 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
 2157 be/4 root        0.00 B/s    0.00 B/s  0.00 %  2.53 % [kworker/u2:0-flush-8:0]
 1733 be/4 root        0.00 B/s    5.52 K/s  0.00 %  0.00 % syslogd -t
:


bオプションによりディスクI/Oを時系列に出力、pオプションにより指定したプロセスのI/Oを出力する。

# iotop -b -p 2369
Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
 2369 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/u2:0-ext4-rsv-conversion]
:

 
iostatコマンド
物理デバイスおよび論理デバイスのI/O状況を出力する。
※Alpine Linuxではsysstatを別途インストールすると実行可能になる。(apk add sysstat)

CPU使用率と物理デバイスのI/Oの状況を出力する。

$ iostat
Linux 5.10.61-0-virt (jpmtkvmftp99)     10/24/21        _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.00    0.77    0.01    0.00   99.14

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.56         5.98        24.04      51358     206354

 
mountコマンド
ディスクのマウント状況を確認する。
オプション無しで実行した場合、現在のディスクのマウント状況が出力される。
デバイス(/dev/xxx)がどこのディレクトリ(/や/boot等)にマウントされているか、使用しているファイルシステム(ext4やtmpfs等)、マウント時の動作(rwやnosuidやnoexec等)等の確認が出来る。

$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,relatime,size=10240k,nr_inodes=60800,mode=755,inode64)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,inode64)
/dev/sda3 on / type ext4 (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=99300k,nr_inodes=819200,mode=755,inode64)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
tracefs on /sys/kernel/debug/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
/dev/sda1 on /boot type ext4 (rw,relatime)

 
 
4.メモリの確認
freeコマンド
メモリの消費状況を確認する。-mオプションを付けて実行した場合。MB単位で出力される。
詳細な消費状況および統計情報はvmstatやpidstatコマンドを使用する。(上記参照)

$ free -m
           total       used       free      shared  buff/cache   available
Mem:         472         36        400           0          36         423
Swap:        961          0        961
$

 
 
5.ネットワークの確認
pingコマンド
自機から宛先の機器に対しicmpパケットを飛ばし、応答を確認する。
他のプロトコルによる通信が出来なくてもpingの応答が有れば、少なくとも物理的には繋がっている事を示す。

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=42 time=7.785 ms
64 bytes from 8.8.8.8: seq=1 ttl=42 time=6.138 ms
64 bytes from 8.8.8.8: seq=2 ttl=42 time=6.112 ms
64 bytes from 8.8.8.8: seq=3 ttl=42 time=6.258 ms
64 bytes from 8.8.8.8: seq=4 ttl=42 time=5.993 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 5.993/6.457/7.785 ms


cオプションで実行回数、sオプションで送信するパケットのサイズを指定し疎通確認する。

$ ping -c 5 -s 64 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 64 data bytes
72 bytes from 8.8.8.8: seq=0 ttl=42 time=109.458 ms
72 bytes from 8.8.8.8: seq=1 ttl=42 time=6.192 ms
72 bytes from 8.8.8.8: seq=2 ttl=42 time=6.330 ms
72 bytes from 8.8.8.8: seq=3 ttl=42 time=6.095 ms
72 bytes from 8.8.8.8: seq=4 ttl=42 time=7.896 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 6.095/27.194/109.458 ms

 
tracerouteコマンド
自機から宛先への通信経路を確認する。
LinuxやFreeBSD等UNIX系OSで実行するtracerouteはudp、Windowsで実行するtracertはicmpを使用する。
DebianやRed Hat等他のディストリビューションではIオプションでICMPパケットを飛ばす事が出来、TオプションでTCPパケットを飛ばす事が出来るが、Alpine LinuxのtracerouteはTオプションが使用出来ない。

$ traceroute 192.168.120.20
traceroute to 192.168.120.20 (192.168.120.20), 30 hops max, 60 byte packets
 1  192.168.100.20 (192.168.100.20)  0.060 ms
 2  192.168.110.20 (192.168.110.20)  0.049 ms
 3  192.168.120.20 (192.168.120.20)  0.039 ms
:


nオプションでDNS逆引きをせずIPアドレスのみの出力、pオプションでプロトコル番号(123はNTP)を指定し実行。

$ traceroute -n -p 123 192.168.120.21
traceroute to 192.168.120.21 (192.168.120.21), 30 hops max, 46 byte packets
 1  192.168.100.20 (192.168.100.20)  0.041 ms
 2  192.168.110.20 (192.168.110.20)  0.033 ms
 3  192.168.120.20 (192.168.120.20)  0.031 ms
:

 
arpコマンド
arpテーブルに載っているIPアドレスとMACアドレスを出力する。
自機が属するネットワーク内にて、IPアドレスの重複やPingを返さない機器の死活確認などが出来る。

$ arp
? (192.168.3.10) at 00:26:82:81:70:21 [ether]  on eth0
? (192.168.3.1) at 30:f7:72:d8:84:f7 [ether]   on eth0 

 
ifconfigコマンド
ネットワークインターフェースのリンクUPやDown、IPアドレス、MACアドレス、I/Oのカウント等を出力する。
RXは受信、TXは送信を示す。
パケットが正常に送受信出来ている時は、errorsやdroppedやoverrunsやcollisions等はカウントされない。

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:E9:37:DE
          inet addr:192.168.3.16  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fee9:37de/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24464 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13066 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:27408907 (26.1 MiB)  TX bytes:1637592 (1.5 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 
netstatコマンド
ネットワークの接続状態(Active Internet connectionsの項目)とUNIXソケットの接続状態(Active UNIX domain socketsの項目)を出力する。
aオプションを付ける事で接続状態だけでなく接続待ち状態や接続が切られた状態のソケット等も出力する。
nオプションで接続ホストやポート番号を数値で出力する。
※Alpine Linuxではnet-toolsを別途インストールすると実行可能になる。(apk add net-tools)

$ netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 192.168.3.16:22         192.168.3.10:54134      ESTABLISHED
tcp        0      0 :::22                   :::*                    LISTEN
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                      9937 /var/run/chrony/chronyd.sock
unix  5      [ ]         DGRAM                      9861 /dev/log
unix  2      [ ]         DGRAM                     15124
unix  3      [ ]         STREAM     CONNECTED      10226
unix  3      [ ]         STREAM     CONNECTED      10227
unix  2      [ ]         STREAM     CONNECTED      10219
unix  2      [ ]         DGRAM                      9970
unix  2      [ ]         DGRAM                      9933


rオプションで、自機が保持している経路情報(ルーティングテーブル)を出力する。
routeコマンドで、同様の出力結果が得られる。

$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
$

 
curlコマンド (端末側)
接続先のAlpine Linuxサーバに接続が可能かcurlコマンドで確認する事が出来る。
ポート番号を指定しサービス対象のポートが開いているか確認する。
ここでは、送信元をMacBook Air(macOS 10.13.6)、宛先をAlpine Linux(192.168.3.254、ポート22222)で構築したSFTPサーバとした接続テストを実施。

以下は、宛先に対し接続が成功した場合の出力例。-vオプションでプロトコルのtelnetと宛先IPアドレス、ポート番号を指定出来る。
Ctrl + Cで抜ける。

$ curl -v telnet://192.168.3.254:22222
* Rebuilt URL to: telnet://192.168.3.254:22222/
*   Trying 192.168.3.254...
* TCP_NODELAY set
* Connected to 192.168.3.254 (192.168.3.254) port 22222 (#0)
^C
$ 

以下は対象となるサービスが動作していなかった事により接続が失敗した場合の例。
宛先のIPアドレス自体は正しい為に通信自体は届いているもののポート番号21のサービス自体が動いていない為、Connection refusedで弾かれる。

宛先のIPアドレスが間違っている場合、あるいは宛先への通信経路上の機器(例えばファイアウォールやルータ・スイッチのACL設定等)で弾かれている場合は、Connection timeoutが出力される。

$ curl -v telnet://192.168.3.254:21
* Rebuilt URL to: telnet://192.168.3.254:21/
*   Trying 192.168.3.254...
* TCP_NODELAY set
* Connection failed
* connect to 192.168.3.254 port 21 failed: Connection refused
* Failed to connect to 192.168.3.254 port 21: Connection refused
* Closing connection 0
curl: (7) Failed to connect to 192.168.3.254 port 21: Connection refused
$

 
Test-NetConnectionコマンド (端末側)
送信元がWindowsの端末である場合、Microsoft PowerShellのコマンドTest-NetConnectionコマンドでポート番号を指定し、Alpine Linuxサーバ側でサービス対象のポートが開いているか確認する事が出来る。
以下は、宛先に対し接続が成功した場合の出力例。TcpTestSucceededがTrueで返ってくる。

PS C:\tmp> Test-NetConnection 192.168.3.254 -Port 22222
ComputerName     : 192.168.3.254
RemoteAddress    : 192.168.3.254
RemotePort       : 22222
InterfaceAlias   : ワイヤレス ネットワーク接続
SourceAddress    : 192.168.3.8
TcpTestSucceeded : True

PS C:\tmp>

以下は対象となるサービスが動作していなかった事により接続が失敗した場合の例。
パケット自体は宛先に届いている為PingSucceededはTrueで返ってくるが、TcpTestSucceededはFalseで返ってくる。

宛先のIPアドレスが間違っている場合、あるいは宛先への通信経路上の機器(例えばファイアウォールやルータ・スイッチのACL設定等)で対象のIPアドレスをPermitする設定が無い場合は、PingSucceededはFalseが出力される。

PS C:\tmp> Test-NetConnection 192.168.3.254 -Port 21
WARNING: TCP connect to (192.168.3.254 : 21) failed
ComputerName           : 192.168.3.254
RemoteAddress          : 192.168.3.254
RemotePort             : 21
InterfaceAlias         : ワイヤレス ネットワーク接続
SourceAddress          : 192.168.3.8
PingSucceeded          : True
PingReplyDetails (RTT) : 29 ms
TcpTestSucceeded       : False

PS C:\tmp>

 
 
6.時刻同期の確認
chronycコマンド
chronyc sourcesを実行し、 ntpq -p実行時のようにNTPサーバとの間で同期が取れているかを確認。管理者権限で実行。

# chronyc sources
[sudo] password for hechtia: 
MS Name/IP address     Stratum Poll Reach LastRx Last sample               
===========================================================================
^* ntp1.jst.mfeed.ad.jp      2   6     1    47  +5154us[+5154us] +/-  87ms
#

ちなみにNTPサーバとの間で強制的に時刻同期させる場合は、以下を実行する。正常に同期出来た際は200 OKを返す。管理者権限で実行。

# chronyc makestep
[sudo] password for hechtia: 
200 OK
#

 
 
7.最後の手段
rebootコマンド
OSを再起動したら事象が改善した...は、よくある話。
管理者権限で実行する。最後の手段につき、個人環境はともかく商用環境では上長の指示の下で実行。
Alpine Linuxの場合、shutdown -r コマンドではなくrebootコマンドである。
ちなみに、落とす際のコマンドはhaltやshutdown -hではなく、poweroffである。

# reboot

 
 
Alpine Linuxの情報源等
https://alpinelinux.org/ Alpine Linux
https://wiki.alpinelinux.org/wiki/Main_Page Alpine Linux Wiki
https://pkgs.alpinelinux.org/packages Alpine Linux Package Filter ※実行したいコマンドを含むパッケージファイルを検索。
https://alpinelinux.org/downloads/ ダウンロードサイト
https://dl-cdn.alpinelinux.org/alpine/ ダウンロードサイト ※3.0以降の全バージョンおよびアーキテクチャ。


Alpine Linuxに関する記事
https://debslink.hatenadiary.jp/entry/20200418/1587204948 AndroidスマホでAlpine Linuxを動かす
https://debslink.hatenadiary.jp/entry/20200506/1588733149 Androidスマホで動作するAlpine LinuxにてFTPサーバを構築
https://debslink.hatenadiary.jp/entry/20211228/1640668431 Alpine Linuxでawallを使ってiptables設定 (2021/12/28追記)
https://debslink.hatenadiary.jp/entry/20220101/1640973274 Alpine LinuxのFTPで暗号化通信 FTPS編 (2022/1/1追記)
https://debslink.hatenadiary.jp/entry/20220111/1641903376 Alpine LinuxのFTPで暗号化通信 SFTP編 (2022/1/11追記)