System Analyse Kit(SysAK)は、Alibaba Cloud オペレーティングシステム向けに提供されているシステム O&M ツールキットであり、日常的なシステム監視、オンラインでの問題診断、システム障害からの復旧など、一般的な O&M シナリオに対応しています。このトピックでは、SysAK のインストール、デプロイ、および使用方法について説明します。
O&M シナリオ
SysAK は、Alibaba Cloud が数百万台のサーバーの運用と保守における長年の経験に基づいて開発しました。SysAK は、以下の一般的な O&M シナリオに適しています。
日常的な監視: SysAK を使用すると、システムリソースの監視、ビジネスのスケジューリングと管理、およびビジネスリソースのよりきめ細かい制御を行うことができます。SysAK はまた、割り込みやジッターなど、システムの問題をリアルタイムで監視するための一連の強化されたシステムメトリクスを提供します。
問題診断: SysAK は、異常な負荷、ネットワークジッター、メモリリーク、I/O ハング、パフォーマンスの例外などの問題をオンラインで診断できます。SysAK は、技術に苦労する人でも簡単に使用できます。
障害からの復旧: SysAK は、デッドロックや故障などの部分的な障害からシステムを隔離し、復旧するための介入機能を提供します。
SysAK は、システムの負荷オーバーヘッドを増やすことも、ネットワークジッターを引き起こすこともありません。すべての SysAK ツールは、最大 3 % の CPU 使用率で同時に実行でき、各 SysAK ツールは最大 1 % の CPU 使用率で実行されます。
SysAK のインストール
環境要件
サポートされているオペレーティングシステム: カーネルバージョン 3.10 以降の Linux オペレーティングシステム(Alibaba Cloud Linux 2、Alibaba Cloud Linux 3、Anolis OS 8.4 ANCK、CentOS 7 など)。
説明uname -aコマンドを実行して、Elastic Compute Service(ECS)インスタンスのオペレーティングシステムのカーネルバージョンを確認できます。アーキテクチャ: x86_64。
インストールとデプロイ
オペレーティングシステム | インストール方法 |
Alibaba Cloud Linux 2 |
|
Anolis OS 8.4 ANCK |
|
CentOS 7 などのカーネルバージョン 3.10 以降の Linux オペレーティングシステム | オープンソースバージョンの SysAK をインストールするためにカスタムコードのみを実行できますが、カスタムコードは互換性の問題を引き起こす可能性があります。anolis / sysak にアクセスして、SysAK をインストールできます。 |
SysAK の使用
SysAK は、ランタイム診断と監視のためにカーネルの関数をフックしますが、システムが不安定になる可能性があります。適切なメンテナンスウィンドウを選択して、診断コマンドと監視コマンドを実行してください。
使用方法
一般的なコマンド | 説明 |
| SysAK の使用方法に関する情報を提供します。
|
| SysAK ツールのサポートされているすべての機能を表示します。 |
| SysAK ツールの機能の使用方法に関する情報を提供します。 |
SysAK の 2 つのモード
SysAK は、監視モードと診断モードをサポートしています。監視モードでは、SysAK はバックグラウンドでシステムを監視し、O&M 担当者向けにメトリクスを収集して追跡します。診断モードはいつでも有効にすることができ、システムの問題の根本原因を分析するために使用されます。詳細については、このトピックのSysAK のシステム監視機能セクションとSysAK の診断機能セクションをご参照ください。
SysAK のシステム監視機能
監視の有効化
次のいずれかの方法を使用して、SysAK がシステムメトリクスを監視できるようにします。
次のコマンドを実行して、SysAK 監視機能を有効にします。
sudo sysak mservice -S次のコマンドを実行して、SysAK 監視機能を常駐システムサービスに追加します。こうすることで、システム起動時に機能が自動的に有効になります。
sudo systemctl enable sysak sudo systemctl start sysak
監視メトリクス
拡張機能とは、SysAK 自体によって、または Alibaba Cloud Linux と Anolis OS の拡張カーネル機能によって実装される機能またはメトリクスを指します。
システムリソース
メトリクスタイプ
カテゴリとメトリクス
説明
拡張機能のプロバイダー
コンピューティングリソース
CPU
user
ユーザーモード CPU 使用率。
なし
sys
システムモード CPU 使用率。
hirq
CPU がハードウェア割り込みを処理しているときの CPU 使用率。
sirq
CPU がソフトウェア割り込みを処理しているときの CPU 使用率。
LOAD
load*
過去 1 秒、5 秒、または 15 秒におけるシステムの平均負荷。
メモリリソース
メモリ
free
使用されていないメモリ量。
used
使用されているメモリ量。
buffer
バッファーとして使用されているメモリ量。
cache
キャッシュとして使用されているメモリ量。
total
メモリ総量。
mem.util
メモリ使用率。
swap
swpin
スワップインされたページ数。
swapout
スワップアウトされたページ数。
total
スワップページの総数。
swap.util
スワップ使用率。
I/O リソース
I/O アクセス
rrqms
デバイスに送信されたマージされた読み取りリクエスト数/秒。
wrqms
デバイスに送信されたマージされた書き込みリクエスト数/秒。
rs
デバイスに送信された読み取りリクエスト数/秒。
ws
デバイスに送信された書き込みリクエスト数/秒。
rsecs
デバイスから読み取られたセクター数/秒。
wsecs
デバイスに書き込まれたセクター数/秒。
rqsize
デバイスに送信されたリクエストの平均サイズ。
qusize
デバイスに送信されたリクエストの平均キューの長さ。
svctm
デバイスに送信された I/O リクエストの平均サービス時間。
io.util
リクエストが発行されている間の CPU 時間の割合。
ディスク容量
bfree
使用されていないデータブロックの数。
bused
使用されているデータブロックの数。
btotl
データブロックの総数。
patition.util
データベースの使用率。
ifree
使用可能な inode の数。
itotl
inode の総数。
iutil
inode の使用率。
ネットワークリソース
ネットワークトラフィック
bytin
受信バイト数。
bytout
送信バイト数。
pktin
受信パケットの総数。
pktout
送信パケットの総数。
TCP
active
アクティブな TCP 接続の数。
pasive
パッシブな TCP 接続の数。
iseg
受信 TCP パケットの数。
outseg
送信 TCP パケットの数。
UDP
idgm
受信 UDP パケットの数。
odgm
送信 UDP パケットの数。
システムのボトルネック
メトリクスタイプ
カテゴリとメトリクス
説明
拡張機能のプロバイダー
I/O ボトルネック
読み取り/書き込みレイテンシ
await
I/O 操作の平均待ち時間。
なし
rawait
I/O 読み取り操作の平均待ち時間。
wawait
I/O 書き込み操作の平均待ち時間。
メモリボトルネック
キャッシュの再利用とデフラグ
kswapd
Kernel Swap Daemon(kswapd)がページを再利用する回数。
pg_kr
非同期的に再利用されるページ数。
pg_dr
直接再利用されるページ数。
kcompd
kcompactd がメモリを圧縮する回数。
dc_all
メモリが直接圧縮される回数。
dc_fin
直接メモリ圧縮が完了する回数。
oom
メモリ不足(OOM)エラーの数。
ネットワークボトルネック
ネットワーク伝送
pkterr
エラーパケットの数。
pktdrp
ドロップされたパケットの数。
EstReset
TCP 接続が ESTABLISHED 状態のときにリセットが発生する回数。
AtmpFail
TCP 接続の確立に失敗した試行回数。
retran
TCP 再送信率。
noport
UDP ポートまたはアドレスが存在しない回数。
idmerr
無効な UDP パケットの数。
CPU ボトルネック
マルチタスク同時実行性
cswch
CPU リソースでコンテキストスイッチが実行される回数。
proc
fork システムコールの数。
準備キューの延長待ち時間
rqslow.dltnum
準備キューでの消費時間がしきい値を超える回数。
SysAK
rqslow.dlttm
準備キューでの消費時間がしきい値を超えたときに発生した合計レイテンシ。
SysAK
システムソフトウェアのボトルネック
カーネル内のクリティカルリソースへのアクセス
noschd.dltnum
CPU がシステムモードで消費した時間がしきい値を超える回数。
SysAK
noschd.dlttm
CPU がシステムモードで消費した時間がしきい値を超えたときに発生した合計レイテンシ。
SysAK
システムの割り込み
メトリクスタイプ
カテゴリとメトリクス
説明
拡張機能のプロバイダー
システムの割り込み
長期間の割り込み無効化レイテンシ
irqoff.dltnum
システムの割り込み無効化期間がしきい値を超える回数。
SysAK
irqoff.dlttm
システムの割り込み無効化期間がしきい値を超えたときに発生した合計レイテンシ。
SysAK
コンテナシナリオ(コンテナごとのメトリクス)
メトリクスタイプ
カテゴリとメトリクス
説明
拡張機能のプロバイダー
コンピューティングリソース
CPU リソース
usr/sys/hriq/sirq
ユーザーモード、システムモード、CPU がハードウェア割り込みを処理しているとき、および CPU がソフトウェア割り込みを処理しているときの CPU 使用率。
なし
負荷情報
nrun
コンテナ内で準備ができているタスクの数。
Alibaba Cloud Linux および Anolis OS
nunint
コンテナ内で D ブロック状態にあるタスクの数。
load*
過去 1 秒、5 秒、または 10 秒におけるコンテナの平均負荷。
メモリリソース
メモリリソース
total/free/used/cache/buffer
コンテナ内のメモリ総量、使用可能なメモリ量、使用済みメモリ量、キャッシュに使用されているメモリ量、およびバッファーに使用されているメモリ量。
なし
メモリボトルネック
pgfault
コンテナ内でページフォールトが発生する回数。
pgmajfault
ディスクスワップまたはファイルマッピングが原因でページフォールトが発生する回数。
mfailcnt
コンテナ内でメモリのリクエストに失敗した試行回数。
drgl*
グローバルメモリ再利用のレイテンシ分布。
Alibaba Cloud Linux および Anolis OS
drml*
コンテナ内のメモリ再利用のレイテンシ分布。
dcl*
コンテナ内のメモリ圧縮のレイテンシ分布。
I/O リソース
I/O メトリクス
riops
コンテナ内の I/O 読み取り操作の数。
なし
wiops
コンテナ内の I/O 書き込み操作の数。
rbps
コンテナから読み取られたバイト数。
wbps
コンテナに書き込まれたバイト数。
rwait
コンテナ内の読み取り操作の待ち時間。
Alibaba Cloud Linux および Anolis OS
wwait
コンテナ内の書き込み操作の待ち時間。
rsrv
コンテナ内の読み取りサービス時間。
wsrv
コンテナ内の書き込みサービス時間。
rioq
コンテナ内でキューに入れられた I/O 読み取り操作の数。
wioq
コンテナ内でキューに入れられた I/O 書き込み操作の数。
rioqsz
コンテナ内でキューに入れられた I/O 操作で読み取られたバイト数。
wioqsz
コンテナ内でキューに入れられた I/O 操作に書き込まれたバイト数。
rarqsz
コンテナ内の I/O 操作で読み取られたバイト数の平均。
warqsz
コンテナ内の I/O 操作に書き込まれたバイト数の平均。
ハードウェアリソース
リソースボトルネック
llcref
コンテナ内で最終レベルキャッシュ(LLC)がアクセスされた回数。
なし
llcmis
コンテナ内の LLC ミスの数。
CPI
コンテナ内の命令ごとのサイクル数。
サービス構成
SysAK の監視機能では、メトリクスの構成ファイルを使用して収集されたメトリクスを構成できます。構成ファイルは、/usr/local/sysak/sysakmon.conf パスに保存されます。構成ファイルを変更した後、systemctl restart sysak コマンドを実行して Mservice サービスを再起動する必要があります。
構成項目の説明:
server_mode http|local: 監視機能の監視モード。有効な値: http および local。http モードは、監視に HTTP サービスモードが使用されることを示します。local モードは、監視データがオンプレミスコンピューターに保存および表示されることを示します。
cron_period 60: ローカル監視モードでのサンプリング期間。デフォルト値: 60。単位: 秒。
output_file_path: ローカル監視モードで監視ログが保存されるパス。デフォルト値: /usr/local/sysak/log/tsar.data。
mod_xxx on: メトリクスが監視されるかどうかを指定します。有効な値: on および off。
onはメトリクスが監視されることを示し、offはメトリクスが監視されないことを示します。
データ表示
監視モード | 監視結果を確認するために使用されるコマンド | 説明 |
http モード |
説明 127.0.0.1 を監視対象の ECS インスタンスの IP アドレスに置き換えます。 | システムの監視情報を取得します。 |
説明 127.0.0.1 を監視対象の ECS インスタンスの IP アドレスに置き換えます。 | cgroup の監視情報を取得します。 | |
説明 127.0.0.1 を監視対象の ECS インスタンスの IP アドレスに置き換えます。 | 指定された cgroup($cgroupid)の監視情報を取得します。 | |
local モード |
| インタラクティブな方法で監視情報を表示します。 |
SysAK の診断機能
ユーザーシナリオベースの診断
コマンドタイプ | 機能 | コマンドと説明 |
ossre_client | システム内の潜在的な問題を自動的にスキャンします。 |
一部のオプションは ossre サーバーで使用できます。 |
loadtask | システム負荷の診断を実行し、負荷が最も高いプロセスと、負荷が最も高い原因を返します。 |
|
iosdiag | I/O ステータスの診断を実行します。 |
|
内部項目固有の診断
スケジューリング
コマンドタイプ
機能
コマンドと説明
nosched
CPU が長時間カーネルモードで実行されている場合、タスクを CPU で実行するためにタイムリーにスケジュールできない問題を診断します。
sysak nosched [--help] [-t THRESH(ms)] [-f LOGFILE] [-s duration(s)]-t THRESH: (オプション) カーネルがタスクをスケジュールしない期間のしきい値を設定します。しきい値を超えると、関連情報が記録されます。単位: ミリ秒。デフォルト値: 10。-f LOGFILE: (オプション) ログファイルを指定します。デフォルト値: /var/log/sysak/nosched/nosched.log。-s durations: (オプション) プログラムを実行できる時間を指定します。単位: 秒。このオプションが指定されていない場合、プログラムは実行を続けます。
irqoff
システム内で割り込みが長時間無効になっている問題を診断します。
sysak irqoff [--help] [-t THRESH(ms)] [-f LOGFILE] [duration(s)]-t THRESH: (オプション) 割り込みが無効になっている期間のしきい値を設定します。しきい値を超えると、関連情報が記録されます。単位: ミリ秒。デフォルト値: 10。-f LOGFILE: (オプション) ログファイルを指定します。デフォルト値: /var/log/sysak/irqoff/irqoff.log。durations: (オプション) プログラムを実行できる時間を指定します。単位: 秒。このオプションが指定されていない場合、プログラムは実行を続けます。
runqslower
システム内のタスクスケジューリングレイテンシが高い問題を診断します。
sysak runqslower [-s SPAN] [-t TID] [-f LOGFILE] [-P] [THRESH]-s SPAN: (オプション) プログラムを実行できる時間を指定します。単位: 秒。このオプションが指定されていない場合、プログラムは実行を続けます。THRESH: (オプション) タスクがプリエンプトされる期間のしきい値を設定します。しきい値を超えると、関連情報が記録されます。単位: ミリ秒。デフォルト値: 20。-f LOGFILE: (オプション) ログファイルを指定します。デフォルト値: /var/log/sysak/runqslow/runqslow.log。-t TID: (オプション) 監視対象のスレッドの ID を指定します。これはフィルターオプションです。デフォルトでは、すべてのスレッドが監視されます。-P: (オプション) 以前にプリエンプトされたタスクの名前とスレッド ID (TID) を記録します。デフォルトでは、そのような情報は記録されません。
メモリ
コマンドタイプ
機能
コマンドと説明
memleak
カーネルメモリリーク (slab メモリリーク、vmalloc メモリリーク、buddy メモリリークを含む) をチェックし、リークが発生している場所を特定します。
sysak memleak [-t type] [-i internal] [-c]-t: メモリリークのタイプを指定します。次のタイプのメモリリークが使用可能です。slab
vmalloc
page
-i: 診断期間を指定します。デフォルト値: 300。単位: 秒。-c: クイック診断を実行するかどうかを指定します。このオプションが指定されている場合、メモリがリークしているかどうかを判断するためにクイック診断が実行されますが、メモリリークが発生している正確な場所は特定されません。
mmaptrace
メモリリークが発生している場所を特定し、ユーザーモードでメモリをリクエストするための呼び出しスタックを提供します。
sysak mmaptrace [ option ] [ args ]-p <pid>: プロセスがメモリをどのようにリクエストするかを監視するプロセスの ID (PID) を指定します。-l: malloc および mmap によってリクエストされたメモリサイズを監視します。-s: ユーザーモードでメモリをリクエストするための呼び出しスタックを表示します。
memgraph
グラフを使用してメモリ使用量を分析して表示します。
sysak memgraph [ option ]-g: メモリ使用量チャートを表示します。-f: ページキャッシュの詳細情報を表示します。-a: 匿名メモリの詳細情報を表示します。-k: メモリがリークしているかどうかを確認します。-l: システムスレッドのメモリ使用量を表示します。-c: システム cgroup のメモリ使用量を表示します。
I/O
コマンドタイプ
機能
コマンドと説明
iofsstat
プロセスとファイルの粒度でディスク I/O 情報を収集します。
sysak iofsstat [-h] [-T TIMEOUT] [-t TOP] [-u UTIL_THRESH] [-b BW_THRESH] [-i IOPS_THRESH] [-c CYCLE] [-d DEVICE] [-p PID] [-j] [-f]-T TIMEOUT: コマンドを実行できる時間を指定します。単位: 秒。-t TOP: I/O リソースの使用量が最大のディスクをいくつ表示するかを指定します。-u UTIL_THRESH: I/O 使用率のしきい値を設定します。I/O 使用率がしきい値よりも低いディスクは無視されます。-b BW_THRESH: 帯域幅のしきい値を設定します。帯域幅がしきい値よりも低いディスクは無視されます。-i IOPS_THRESH: IOPS のしきい値を設定します。IOPS がしきい値よりも低いディスクは無視されます。-c CYCLE: 更新間隔を指定します。単位: 秒。-d DEVICE: 監視対象のディスクの名前を指定します。-p PID: 監視対象のプロセスの ID を指定します。-j,--json: コマンド出力を JSON 形式で表示します。-f,--fs: 指定されたパーティションの情報を監視して報告します。
ネットワーク
コマンドタイプ
機能
コマンドと説明
pingtrace
ネットワークレイテンシを検出します。
sysak pingtrace [ options ]-v,--version: バージョン番号を表示します。-h,--help: ヘルプ情報を返します。-s,--server: サーバーモードで実行します。-c,--client ip: クライアントモードで実行します。-C,--count UINT: プローブパケットの数を表示します。デフォルトでは、パケット数は無制限です。-i <interval_us>: パケットを送信する間隔を設定します。単位: マイクロ秒。-t < UINT >: プログラムを実行できる時間を指定します。単位: 秒。-m,--maxdelay us: ping レイテンシのしきい値を設定します。レイテンシがしきい値よりも高いパケットのみが記録されます。デフォルト値: 0。-b <INT=556 >: プローブパケットのサイズを指定します。値は 144 よりも大きくする必要があります。単位: バイト。--log TEXT=./pingtrace.log: ログファイルの名前を指定します。--logsize INT: ログファイルで使用できる最大容量を指定します。--logbackup INT=3: ログファイルに作成できるバックアップの最大数を指定します。--mode auto/pingpong/compact: PingTrace の実行モードを指定します。-o,--output image/json/log/imagelog: PingTrace データの出力形式を指定します。-n,--namespace: net namespace 情報を確認します。--nslocal: net namespace 情報が確認されるときに、PingTrace クライアントとサーバーを同じホストで実行して、冗長データの取得を防ぎます。--userid UINT: net namespace 情報が確認されるときに、異なるホストに異なるユーザー ID を指定します。これにより、PingTrace は異なるホスト上の時間同期の問題を特定して解決できます。--debug: libbpf 情報などの関連するデバッグ情報を表示します。
skcheck
TCP およびソケットのリークをチェックします。
sysak skcheck [ options ] [ cmdargs ]-s: リーク検出を有効にします。-i: ソケットを有効にするためのしきい値を設定します。デフォルト値:2000。-l: ソケットを無効にするしきい値を設定します。デフォルト値:500。
パフォーマンス
コマンドタイプ
機能
コマンドと説明
numa_access
指定された PID を持つプロセスの情報と、CPU の Non-Uniform Memory Access(NUMA)情報を表示します。
sysak numa_access [ options ] [ cmdargs ]-p <pid>: PID を指定します。-c <cpu>: CPU を指定します。-i <time>: 情報を表示する間隔を設定します。
hw_event
Docker ハードウェアイベントの情報を表示します。
sysak hw_event [ options ] [ cmdargs ]-c <name>: Docker の名前を指定します。このオプションを指定しない場合、デフォルトですべての Docker のハードウェアイベントが表示されます。-s <time>: 実行期間を設定します。デフォルト値:5。単位:秒。
仮想化
コマンドタイプ
機能
コマンドと説明
kvmexittime
VM-exit イベントをトレースおよび診断します。
sysak kvmexittime [--help] [-p PID] [-t TID] [interval]-p <PID>: PID を指定します。-t <TID>: TID を指定します。interval: VM-exit イベントをトレースおよび分析するための間隔を設定します。--help: ヘルプ情報を返します。
汎用
コマンドタイプ
機能
コマンドと説明
syscall_slow
システムの呼び出し応答が遅い場合に、アプリケーションスレッド間のロックの競合を自動的に分析します。
sysak syscall_slow [-t THRESH(ms)] [-n sys_NR] <[-c COMM] [-p tid]> [-f LOGFILE][duration(s)]-t: (オプション) システム応答時間のしきい値を設定します。しきい値を超えた場合は、関連情報が記録されます。デフォルト値:10。単位:ミリ秒。-n: (オプション) 指定されたシステム呼び出しをチェックします。デフォルトでは、すべてのシステム呼び出しがチェックされます。-c/-p: タスク名または PID を指定します。タスク名と PID の両方を指定することはできません。このオプションは必須です。-f: (オプション) ログファイルを指定します。デフォルト値:/var/log/sysak/syscall_slow/syscall_slow.log。durations: (オプション) プログラムの実行時間を指定します。単位:秒。このオプションが指定されていない場合、プログラムは実行を継続します。
ulockcheck
アプリケーションスレッド間のロックの競合を自動的に分析します。
sysak ulockcheck -p <pid> | -s <thread pid>| -a | -t <0|1> | -d-p: 指定されたプロセスのスレッド間のロック競合を監視します。-a: 現在のロック所有者と上位 5 つのロック要求者を表示します。-s: 監視対象スレッドのロック競合状態を表示します。-t: 出力を有効にします。スレッドが 100 ミリ秒を超えてロックを待機している場合、ユーザーモードのスレッドの呼び出しスタックが表示されます。-d: 監視を無効にします。
cpuirq
CPU の割り込みバインディングと実行状態を表示します。
sysak cpuirq [-c cpu -b ] [ -t [ -i interval ] ]-c: CPU を指定します。-b: 指定された CPU の割り込みバインディング情報を表示します。-t: 特定の期間に最も割り込みが多いリクエストを表示します。-i: データ収集の間隔を設定します。
softirq
システム内のソフト割り込みの実行状態 (数やレートなど) を記録します。
sysak softirq [ option ] [ args ]-s: 初期データを含むソースファイルを指定します。-r: 出力を格納するファイルを指定します。