カテゴリー
2024年 iSCSI Linux LPIC QNAP Ubuntu コンピューター ストレージ

Linux で iSCSI イニシエーター設定 (Ubuntu 編)

PVアクセスランキング にほんブログ村 にほんブログ村 ブログブログへ
にほんブログ村

Ubuntu を使って、外部ストレージの iSCSI ターゲットに接続させた時のメモです。

今回の構成は、以下の通りです。

Ubuntu と QNAP は同じセグメントに設置していますが、別のセグメントであっても OK です。ただし、遅延がない程度の距離にした方が良いです。

以前 10ミリ秒 もないくらいの距離で試しましたが、遅くて使い物になりませんでした。同じ LAN 内にした方が良いです。

iSCSI イニシエーターのインストール

iSCSI イニシエーターのモジュールをインストールします。

kk@Jackson:~$ sudo apt -y install open-iscsi 
[sudo] password for kk: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
     <省略>
Processing triggers for libc-bin (2.35-0ubuntu3.6) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for initramfs-tools (0.140ubuntu13.4) ...
update-initramfs: Generating /boot/initrd.img-6.5.0-15-generic
kk@Jackson:~$ 

iSCSI の設定

「/etc/iscsi/」のフォルダーができますので、その中の「initiatorname.iscsi」のファイルを編集します。

kk@Jackson:/etc/iscsi$ ls -la 
total 36
drwxr-xr-x   2 root root  4096 Feb  6 12:01 .
drwxr-xr-x 149 root root 12288 Feb  6 12:01 ..
-rw-------   1 root root   348 Feb  6 12:01 initiatorname.iscsi  <<< このファイルを編集
-rw-r--r--   1 root root 13334 Jan 19  2022 iscsid.conf
kk@Jackson:/etc/iscsi$ 
kk@Jackson:/etc/iscsi$ sido vim initiatorname.iscsi 

iSCSI ターゲットとなるストレージ側で設定しているターゲット名(IQN)を指定します。

## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator.  The InitiatorName must be unique
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
# InitiatorName=iqn.2004-10.com.ubuntu:01:c317f55f6df
InitiatorName=iqn.2004-04.com.qnap:ts-231k:iscsi.jonathan.45e748  <<< iSCSI ターゲットを指定

次に、同じフォルダーにある「iscsid.conf」ファイルを編集します。

kk@Jackson:/etc/iscsi$ ls -la 
total 36
drwxr-xr-x   2 root root  4096 Feb  6 12:10 .
drwxr-xr-x 149 root root 12288 Feb  6 12:01 ..
-rw-------   1 root root   415 Feb  6 12:10 initiatorname.iscsi
-rw-r--r--   1 root root 13334 Jan 19  2022 iscsid.conf  <<< このファイルを編集
kk@Jackson:/etc/iscsi$ 
kk@Jackson:/etc/iscsi$ sido vim iscsid.conf

58行目から70行目にかけて設定をしていきます。

まず、CHAP 認証を有効にします。

次に、iSCSI ターゲット側で設定しているユーザー名とパスワードを指定します。

# *************
# CHAP Settings
# *************

# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
#node.session.auth.authmethod = CHAP
node.session.auth.authmethod = CHAP  <<< コメントを外して有効化

# To configure which CHAP algorithms to enable set
# node.session.auth.chap_algs to a comma seperated list.
# The algorithms should be listen with most prefered first.
# Valid values are MD5, SHA1, SHA256, and SHA3-256.
# The default is MD5.
#node.session.auth.chap_algs = SHA3-256,SHA256,SHA1,MD5

# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
#node.session.auth.username = username
#node.session.auth.password = password
node.session.auth.username = kkint  <<< ユーザー名を指定
node.session.auth.password = 1234567890abcde  <<< パスワードを指定

iSCSI のデーモンを再起動して、設定変更を読み込ませます。

kk@Jackson:/etc/iscsi$ sudo systemctl restart iscsid open-iscsi 

kk@Jackson:/etc/iscsi$ systemctl status iscsid open-iscsi.service 
● iscsid.service - iSCSI initiator daemon (iscsid)
     Loaded: loaded (/lib/systemd/system/iscsid.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-02-06 12:18:43 JST; 18s ago
TriggeredBy: ● iscsid.socket
       Docs: man:iscsid(8)
    Process: 808615 ExecStartPre=/lib/open-iscsi/startup-checks.sh (code=exited, status=0/SUCCESS)
    Process: 808618 ExecStart=/sbin/iscsid (code=exited, status=0/SUCCESS)
   Main PID: 808620 (iscsid)
      Tasks: 2 (limit: 4488)
     Memory: 4.4M
        CPU: 42ms
     CGroup: /system.slice/iscsid.service
             ├─808619 /sbin/iscsid
             └─808620 /sbin/iscsid

Feb 06 12:18:43 Jackson systemd[1]: Starting iSCSI initiator daemon (iscsid)...
Feb 06 12:18:43 Jackson iscsid[808618]: iSCSI logger with pid=808619 started!
Feb 06 12:18:43 Jackson systemd[1]: Started iSCSI initiator daemon (iscsid).
Feb 06 12:18:44 Jackson iscsid[808619]: iSCSI daemon with pid=808620 started!

○ open-iscsi.service - Login to default iSCSI targets
     Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled)
     Active: inactive (dead)
  Condition: start condition failed at Tue 2024-02-06 12:18:43 JST; 18s ago
             ├─ ConditionDirectoryNotEmpty=|/etc/iscsi/nodes was not met
             └─ ConditionDirectoryNotEmpty=|/sys/class/iscsi_session was not met
       Docs: man:iscsiadm(8)
             man:iscsid(8)

Feb 06 12:01:54 Jackson systemd[1]: Condition check resulted in Login to default iSCSI targets be>
Feb 06 12:18:43 Jackson systemd[1]: Condition check resulted in Login to default iSCSI targets be>
kk@Jackson:/etc/iscsi$ 

iSCSI 接続

ディスカバリーをしてみます。

iSCSI ターゲットの IP アドレスを指定します。

ストレージが見えましたね。

kk@Jackson:/etc/iscsi$ sudo iscsiadm -m discovery -t sendtargets -p 172.16.26.4
172.16.26.4:3260,1 iqn.2004-04.com.qnap:ts-231k:iscsi.jonathan.45e748
kk@Jackson:/etc/iscsi$ 

状態を確認します。

こちらでもストレージが見えています。

kk@Jackson:/etc/iscsi$ sudo iscsiadm -m node -o show 
# BEGIN RECORD 2.1.5
node.name = iqn.2004-04.com.qnap:ts-231k:iscsi.jonathan.45e748
node.tpgt = 1
node.startup = manual
node.leading_login = No
iface.iscsi_ifacename = default
iface.net_ifacename = <empty>
iface.ipaddress = <empty>
iface.prefix_len = 0
iface.hwaddress = <empty>
iface.transport_name = tcp
     <省略>
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.DataDigest = None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No
# END RECORD
kk@Jackson:/etc/iscsi$ 

iSCSI ターゲットにログインします。

「successful」が表示されれば OK です。

表示されない場合、IQN や IP アドレス、ユーザー名、パスワードが間違っている可能性があります。

kk@Jackson:/etc/iscsi$ sudo iscsiadm -m node --login -p 172.16.26.4
Logging in to [iface: default, target: iqn.2004-04.com.qnap:ts-231k:iscsi.jonathan.45e748, portal: 172.16.26.4,3260]
Login to [iface: default, target: iqn.2004-04.com.qnap:ts-231k:iscsi.jonathan.45e748, portal: 172.16.26.4,3260] successful.
kk@Jackson:/etc/iscsi$ 

接続確認

確立しているセッションを確認します。

kk@Jackson:/etc/iscsi$ sudo iscsiadm -m session -o show 
tcp: [1] 172.16.26.4:3260,1 iqn.2004-04.com.qnap:ts-231k:iscsi.jonathan.45e748 (non-flash)
kk@Jackson:/etc/iscsi$ 

QNAP の方の設定も見てみます。

Ubuntu (172.16.26.10)から接続されていますね。

システムの起動時に自動で接続するようにするには、以下の設定を入れておきます。

kk@Jackson:/etc/iscsi$ sudo iscsiadm -m node -p 172.16.26.4 -o update -n node.startup -v automatic 
kk@Jackson:/etc/iscsi$ 

パーティションを見てみましょう。

「sdb」で、ストレージの iSCSI 領域が見えてますね。

kk@Jackson:/etc/iscsi$ cat /proc/partitions 
major minor  #blocks  name

   7        0          4 loop0
   7        1      64988 loop1
   7        2      65444 loop2
   7        3      75892 loop3
   7        4      75676 loop4
   7        6     268812 loop6
   7        7     358084 loop7
   8        0   31266648 sda
   8        1     524288 sda1
   8        2   30740480 sda2
   7        8     358088 loop8
   7        9     508804 loop9
   7       10     508908 loop10
   7       11      93888 loop11
   7       12      47032 loop12
   7       13      12620 loop13
   7       14      41836 loop14
   7       15      41400 loop15
   7       16        452 loop16
   7       17        428 loop17
   7       18     268380 loop18
   8       16 2411724800 sdb  <<<
   8       17 2411722752 sdb1
kk@Jackson:/etc/iscsi$ 

面白かったら、フォローしてください!

世の中には楽しいことがいっぱい - にほんブログ村

関連するブログ:

最近の人気ブログ TOP 10:

最近の記事:

カテゴリー
2023年 Cron Linux LPIC コマンド コンピューター 技術一般 自動化

Linux の Cron の基本的な使い方

PVアクセスランキング にほんブログ村 にほんブログ村 ブログブログへ
にほんブログ村

こんなことしたいと思ったりしませんか?

  • 毎日、ある時間にプログラムを実行したい。
  • 一時間に一回、コマンドを実行したい。
  • 毎月一度、バックアップを取りたい。

Linuxには、定期的にコマンドを実行するために cron と呼ばれるデーモンプロセスがあります。これを使うと、決まった時間にコマンドを実行させたりすることができて便利です。

今回は、Cron(クーロン)の基本的な使い方をまとめてみます。

cron は、「crond(デーモン)」と「crontab」 で構成されます。1分ごとに crond が起動され、crontab ファイルに定義されたスケジュールを調べて、そこに実行すべきジョブがあれば実行します。

スケジューリングの編集は、以下の2つの方法で行えます。

  • crontabコマンド を利用する
  • /etc/crontab に書き込む

今回は、Crontab に定義を書き込む形で設定していきます。

Crond が動いているか確認

まず、使用しているシステムで、Cronデーモンが動作している必要があります。

「systemctl status <デーモンの名前>」コマンドを使って確認します。

kkint@ubuntu:/etc$ systemctl status cron.service
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-10-06 12:01:47 JST; 3 days ago
Docs: man:cron(8)
Main PID: 985 (cron)
Tasks: 1 (limit: 4555)
Memory: 1.3M
CPU: 841ms
CGroup: /system.slice/cron.service
└─985 /usr/sbin/cron -f -P

Crond が動いていれば、上記のように「active(running)」の表示が出ます。

もし動いていない場合は、以下のコマンドで起動できます。

systemctl start cron.service

Crontab で設定

「/etc/crontab」ファイルに書き込む方法での設定手順です。まずは、Crontab ファイルを開いて見て見ましょう。

cat /etc/crontab

「cat」コマンドで、Crontab ファイルを指定して開いてみます。

kkint@ubuntu:/etc$ cat /etc/crontab

/etc/crontab: system-wide crontab

Unlike any other crontab you don't have to run the `crontab'

command to install the new version when you edit this file

and files in /etc/cron.d. These files also have username fields,

that none of the other crontabs do.

SHELL=/bin/sh

You can also override PATH, but by default, newer versions inherit it from the environment

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Example of job definition:

.---------------- minute (0 - 59)

| .------------- hour (0 - 23)

| | .---------- day of month (1 - 31)

| | | .------- month (1 - 12) OR jan,feb,mar,apr …

| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

| | | | |

* * * * * user-name command to be executed

17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
kkint@ubuntu:/etc$

下の方に、「*」が 5つ並んでいる行が見えますね。ここに定義を記入していきます。

この「*」印ですが、左から順に「分、時、日、月、曜日、実行ユーザー、 実行するコマンド」となっています。
時間は24時間で表記をします。

指定できる値は、下記のようになります。

指定対象指定範囲
0〜59
0〜23
1〜31
1〜12 または jan〜dec
曜日0〜7 または sun〜sat

「分 時 日 月 曜日 ユーザー コマンド」の順に記入していきます。

< 記述例 >

1時に実行

  • 1 * * * [ユーザー] [コマンド]

13時に実行

  • 13 * * * [ユーザー] [コマンド]

5分おきに実行

*/5 * * * * [ユーザー] [コマンド]

1時、2時、5時、6時、7時、8時に実行

  • 1,2,5-8 * * * [ユーザー] [コマンド]

もう少し例を見ていきましょう。

kkint というユーザー権限で実行し、kkint ユーザーのデスクトップに test.txt を作成する例です。

1分ごとに実行

* * * * * kkint touch /home/kkint/Desktop/test.txt

1:00 – 1:59 まで1分ごとに実行

* 1 * * * kkint touch /home/kkint/Desktop/test.txt

毎日14:00 に実行

0 14 * * * kkint touch /home/kkint/Desktop/test.txt

毎月10日から20日の 00:00 に実行

0 0 10-20 * * kkint touch /home/kkint/Desktop/test.txt

毎週月曜日から金曜日の 13:00 に実行

0 13 * * 1-5 kkint touch /home/kkint/Desktop/test.txt

Cron のログを出力する

デフォルトでは、Cron のログは出力されないようになっていますが、これを出力するようにすると、動作確認の際に便利です。

「/etc/rsyslog.d/50-default.conf」ファイルの設定を変更します。

kkint@ubuntu:/etc$ cat /etc/rsyslog.d/50-default.conf | grep cron

#cron.* /var/log/cron.log  <<<<< この部分

cron,daemon.none;\

まず、vim などのエディターを使って、上記ファイルを開きます。

$ vim /etc/rsyslog.d/50-default.conf

次に、対象の部分のコメントを外します。

#cron.* /var/log/cron.log
        |
        *
cron.* /var/log/cron.log  <<<<< コメントアウトする

最後に、rsyslogを再起動して、変更を適用します。

$ sudo service rsyslog restart

ログの確認例

2分おきに df コマンドを実行し、その結果をテキストファイルに書き込み、デスクトップに保存した時のログの出力は、以下の通りです。

Crontab ファイルには、以下のように記載しています。

*/2 * * * * kkint /usr/bin/df -h > /home/kkint/Desktop/df_results.txt

ログを見ると、指定したコマンドが実行されているのが分かりますね。

kkint@ubuntu:/etc$ cat /var/log/cron.log
Oct 9 13:45:01 ubuntu CRON[9087]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 9 13:55:01 ubuntu CRON[9164]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 9 14:01:01 ubuntu cron[985]: (system) RELOAD (/etc/crontab)

Oct 9 14:45:01 ubuntu CRON[10567]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 9 14:46:01 ubuntu CRON[10575]: (kkint) CMD (/usr/bin/df -h >> /home/kkint/Desktop/df_results)
Oct 9 14:46:01 ubuntu CRON[10576]: (kkint) CMD (date >> /home/kkint/Desktop/df_results)

面白かったら、フォローしてください!

世の中には楽しいことがいっぱい - にほんブログ村

関連するブログ:

最近の人気ブログ TOP 10:

最近の記事:

カテゴリー
2023年 Linux SNI (Server Name Indication) Windows クラウド コンピューター 証明書

Server Name Indication (SNI) とは

PVアクセスランキング にほんブログ村 にほんブログ村 ブログブログへ
にほんブログ村

まず、ウェブサーバーなどで使われているバーチャルホストという技術が、どのようなものなのかを知っておく必要があります。

通常はWebサーバやメールサーバを運用するのにドメインの数以上のサーバコンピュータが必要となる。バーチャルホストを利用すると1つのサーバコンピュータで複数のドメインを運用することができ、サーバコンピュータの数を減らし運用のコストを下げることができる。また、後述する名前ベースバーチャルホストの場合はIPアドレスも節約することができる。 また、ドメインの追加も容易で、小規模Webサイトの運営や安価なレンタルサーバサービスなどでの利用が盛んである。

ウィキペディア

SSL/TLS では「同じサーバーは 1つの SSL サーバ証明書しか使えない」のが基本です。

ただ、このままだと不便な場合もあります。例えばレンタルサーバサービスをしているとしましょう。同じサーバを複数のユーザが利用し、更にユーザーごとに異なるドメインを利用するという使い方ができなければ、レンタルサーバーのサービスは成り立ちません。

このために出てきたのが、バーチャルホストです。

バーチャルホストの種類

今時のウェブサーバーでは、1台で複数の ウェブサービスを提供することが当たり前になっています。この技術をバーチャルホストと呼びます。

バーチャルホストには 2種類があります。

  • IP ベース
  • 名前ベース

IP アドレスが複数必要のない名前ベースのバーチャルホストの方が主流ですが、実際は、両方を混在させて使うケースもあります。

名前ベースのバーチャルホストの設定例

IP アドレスは同じで、複数のウェブサイト(ドメイン)を提供するのが特徴です。

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/kkint1
ServerName www.kkinternational.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/kkint2
ServerName www.kkinternational.work

# Other directives here</VirtualHost>

IP ベースのバーチャルホストの設定例

ウェブサイト(ドメイン)毎に、異なる IP アドレスを使うのが特徴です。

Listen 80

<VirtualHost 172.30.30.100>
DocumentRoot /www/kkint1
ServerName www.kkinternational.com

</VirtualHost>

<VirtualHost 172.30.30.200>
DocumentRoot /www/kkint2
ServerName www.kkinternational.work

</VirtualHost>

なぜ SNI が必要なのか

このバーチャルホスト(特に名前ベースの方)が使われ始めたのが理由です。

名前ベースのバーチャルホストには、

  1. 同じ IP アドレスで、複数のウェブサービス(ドメイン)を提供する
  2. それらのウェブサービスは HTTPS を使っていて、サーバー証明書で暗号化されている(現在は HTTPS がほぼ必須)

という特徴があります。

上記 1の特徴から、バーチャルホストを使うウェブサーバーは、「家」よりも「アパートの建物」に似ていると言えます。アパートは、複数の部屋に分かれています。これらの部屋が、ウェブサービスでありドメインです。

次に上記 2の特徴です。この「HTTPS でサーバー証明書を使っている」というところがポイントです。基本的な SSL/TLS の仕様では、サーバー証明書は、同じ IP アドレスにつき 1ドメインしか運用できません。

上記1と2の特徴を考えると、複数のドメイン名をホストするため、IP アドレスだけでは、ユーザーが到達しようとしているドメインを示すのに十分ではありません。

なぜなら、間違った SSL 証明書を表示する可能性があり、HTTPS 接続ができなかったり、または終了されたりしてしまうというケースが発生する訳です。

じゃあ SNI があると?

Server Name Indication(SNI)は、この問題を解決するために作られました。

SNI は、HTTPS で使用される TLS プロトコルの拡張機能として提供されています。

TLS/SSL ハンドシェークに含まれていて、クライアント PC が、到達しようとしている ウェブサイトの正しい SSL 証明書を確認することができるようにします。

Server Name Indication(SNI、サーバー ネーム インディケーション、サーバ名表示)は、SSL/TLSの拡張仕様の一つである。SSLハンドシェイク時にクライアントがアクセスしたいホスト名を伝えることで、サーバ側がグローバルIPごとではなくホスト名によって異なる証明書を使い分けることを可能にする。

ウィキペディア

SNI を利用すると、クライアント PC は SSL/TLS ハンドシェイクの際に「これから通信したいサーバのドメイン名」をサーバに通知します。ウェブサーバーは「どのドメインに対応するサーバ証明書を利用すべきか」を、判断することができるようになります。

これにより、接続したいウェブサービスに必要なサーバー証明書が入手できるという訳です。

SNI をサポートしてないウェブブラウザー

SNI はクライアント側(ブラウザー)で、この機能をサポートしていないといけない訳ですが、古いブラウザーですと SNI をサポートしていません。

  • Windows XP 以前の全ブラウザ
  • IE 6 以前
  • いわゆる「ガラケー」のブラウザ

まあ、こんな古い環境でインターネットのブラウジングをしている人もいないと思いますが。

SNI をサポートしているブラウザーの一覧はこちら

SNI をサポートしているウェブサーバー

  • Apache 2.2.12 以降 + mod_ssl もしくは mod_gnutls
  • Apache Traffic Server(英語版) 3.2.0 以降
  • Cherokee(英語版) (コンパイル時 TLS サポートを有効にした場合)
  • lighttpd 1.4.24 以降(それ以前の1.4.xはパッチ)
  • Nginx と OpenSSL
  • F5 ネットワークス Local Traffic Manager 11.1 およびそれ以降
  • Hiawtha(英語版) 8.6 またはそれ以降
  • IBM HTTP Server 9.0 およびそれ以降
  • LiteSpeed 4.1 およびそれ以降
  • Pound 2.6 以降
  • Apache Tomcat (Java 7 およびそれ以降)
  • Microsoft IIS 8
  • PageKite tunneling reverse proxy
  • Citrix NetScaler 9.3 以降
  • Radware Alteon ADC (AlteonOS 28.1 以降)

関連するブログ:

最近の人気ブログ TOP 10:

最近の記事:

カテゴリー
2023年 Linux LPIC コマンド コンピューター 技術一般

LPIC を学ぶ(1) lsof コマンドについて

PVアクセスランキング にほんブログ村 にほんブログ村 ブログブログへ
にほんブログ村

オープン中のファイルやプロセス、待ち受けポート番号などを、リストで表示するコマンドです。

lsof(エルエスオーエフ)コマンドは”list open files”の意味であり、多くのUnix系オペレーティングシステムで、オープン中のファイルやそのファイルをオープンしているプロセスのリストを出力するコマンドである。このオープンソースのユーティリティは、パデュー大学コンピューティングセンターの元アソシエートディレクター、ビクター・A・アベルによって開発・サポートされた。lsofはいくつかのUnix系OSで動作し、サポートされている。

https://ja.wikipedia.org/wiki/Lsof

lsofコマンドの書式

lsof [オプション]

「オプション」で、よく使うものは以下のものがあります。

 オプション 意味
-Pポート番号をサービス名に変換しない
-cプロセス名を指定する
-pプロセス ID を指定する
-n名前解決なしで IP アドレスで表示する
-uユーザー名を指定する
-iネットワークソケットを表示する
よく使うと思われるオプションのみ抜粋

lsof コマンドの出力には、以下の10個の項目があります。

 項目 意味
COMMAND表示されているコマンド
PIDプロセス ID
USER実行ユーザー名
FDファイルディスクリプター
TYPEタイプ
DEVICEデバイス
SIZE/OFFファイルサイズ
NODEプロトコル
NAMEファイル又はポート

コマンド出力例

それでは、「c」オプションの出力例を見ていきましょう。

「c」オプションでは、プロセス名を指定します。

まずは、ps コマンドでプロセス一覧を見てみましょう。

root@kelly ~]# ps aux | more
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.9 173312  7044 ?        Ss   01:42   0:02 /usr/lib/systemd/systemd rhgb --switched-root --system 
--deserialize 31
root           2  0.0  0.0      0     0 ?        S    01:42   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   01:42   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   01:42   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   01:42   0:00 [netns]
root           7  0.0  0.0      0     0 ?        I<   01:42   0:00 [kworker/0:0H-events_highpri]
root           9  0.0  0.0      0     0 ?        I<   01:42   0:07 [kworker/0:1H-events_highpri]
root          10  0.0  0.0      0     0 ?        I<   01:42   0:00 [mm_percpu_wq]
root          12  0.0  0.0      0     0 ?        I    01:42   0:00 [rcu_tasks_kthre]
root          13  0.0  0.0      0     0 ?        I    01:42   0:00 [rcu_tasks_rude_]

この中で、今回は「rcu_gp」を指定してみます。

[root@kelly ~]# lsof -c rcu_gp
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
      Output information may be incomplete.
COMMAND PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
rcu_gp    3 root  cwd       DIR  253,0      235  128 /
rcu_gp    3 root  rtd       DIR  253,0      235  128 /
rcu_gp    3 root  txt   unknown                      /proc/3/exe
[root@kelly ~]# 

「rcu_gp」に関する表示が出ましたね。

次に「i」オプションを見てみましょう。

「i」オプションでは、ネットワークソケットを表示します。

[root@kelly ~]# lsof -i | more
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae   772  avahi   12u  IPv4  22478      0t0  UDP *:mdns 
avahi-dae   772  avahi   13u  IPv6  22479      0t0  UDP *:mdns 
avahi-dae   772  avahi   14u  IPv4  22480      0t0  UDP *:38624 
avahi-dae   772  avahi   15u  IPv6  22481      0t0  UDP *:55406 
chronyd     798 chrony    5u  IPv4  22365      0t0  UDP localhost:323 
chronyd     798 chrony    6u  IPv6  22366      0t0  UDP localhost:323 
NetworkMa   949   root   28u  IPv4 122860      0t0  UDP kelly.kanan.com:bootpc->_gateway:bootps 
cupsd       956   root    6u  IPv6  23433      0t0  TCP localhost:ipp (LISTEN)
cupsd       956   root    7u  IPv4  23434      0t0  TCP localhost:ipp (LISTEN)
sshd        958   root    3u  IPv4  23448      0t0  TCP *:ssh (LISTEN)
sshd        958   root    4u  IPv6  23459      0t0  TCP *:ssh (LISTEN)
firefox   36564  kxxx   56u  IPv4 209042      0t0  TCP kelly.kk.com:49672->239.237.117.34.bc.googleusercontent.com:htt
ps (ESTABLISHED)
firefox   36564  kxxx  124u  IPv4 173714      0t0  TCP kelly.kk.com:35908->ec2-35-161-139-221.us-west-2.compute.amazon
aws.com:https (ESTABLISHED)
[root@kelly ~]# 

通信しているもののみが表示されました。

「i」オプションでは、「i:<Port#>」とすることでポート番号を指定することもできます。例えば、HTTP(TCP/80)を指定する場合は、「i:80」と指定します。

以下は、HTTPS(TCP/443)を指定した例となります。

[root@kelly ~]# lsof -i:443 | more
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
firefox 36564 kxxx   56u  IPv4 209042      0t0  TCP kelly.kk.com:49672->239.237.117.34.bc.googleusercontent.com:https 
(ESTABLISHED)
firefox 36564 kxxx  124u  IPv4 173714      0t0  TCP kelly.kk.com:35908->ec2-35-161-139-221.us-west-2.compute.amazonaws
.com:https (ESTABLISHED)
[root@kelly ~]# 

次に「u」オプションを見てみましょう。

「u」オプションでは、指定したユーザー名でフィルターして表示します。以下の例では、root ユーザーを指定しています。

[root@kelly ~]# lsof -u root | more
COMMAND     PID USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1 root  cwd       DIR              253,0       235        128 /
systemd       1 root  rtd       DIR              253,0       235        128 /
systemd       1 root  txt       REG              253,0   1949240     496091 /usr/lib/systemd/systemd
systemd       1 root  mem       REG              253,0    582323     579363 /etc/selinux/targeted/contexts/files/file_cont
exts.bin
systemd       1 root  mem       REG              253,0     45408   33959961 /usr/lib64/libffi.so.8.1.0
systemd       1 root  mem       REG              253,0    153600   33883645 /usr/lib64/libgpg-error.so.0.32.0
systemd       1 root  mem       REG              253,0     28552   33978142 /usr/lib64/libattr.so.1.1.2501
systemd       1 root  mem       REG              253,0    102568   33871561 /usr/lib64/libz.so.1.2.11
systemd       1 root  mem       REG              253,0     32528   33959999 /usr/lib64/libcap-ng.so.0.0.0
systemd       1 root  mem       REG              253,0     41056   34639057 /usr/lib64/libeconf.so.0.4.1

以下、省略

今度は、kxxx ユーザーを指定してみます。USER の項目が kxxx のもののみが一覧表示されました。

[root@kelly ~]# lsof -u kanta | more
COMMAND     PID  USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd    1828 kxxx  cwd       DIR              253,0       235        128 /
systemd    1828 kxxx  rtd       DIR              253,0       235        128 /
systemd    1828 kxxx  txt       REG              253,0   1949240     496091 /usr/lib/systemd/systemd
systemd    1828 kxxx  mem       REG              253,0    582323     579363 /etc/selinux/targeted/contexts/files/file_con
texts.bin
systemd    1828 kxxx  mem       REG              253,0     45408   33959961 /usr/lib64/libffi.so.8.1.0
systemd    1828 kxxx  mem       REG              253,0    153600   33883645 /usr/lib64/libgpg-error.so.0.32.0
systemd    1828 kxxx  mem       REG              253,0     28552   33978142 /usr/lib64/libattr.so.1.1.2501
systemd    1828 kxxx  mem       REG              253,0    102568   33871561 /usr/lib64/libz.so.1.2.11
systemd    1828 kxxx  mem       REG              253,0     32528   33959999 /usr/lib64/libcap-ng.so.0.0.0
systemd    1828 kxxx  mem       REG              253,0     41056   34639057 /usr/lib64/libeconf.so.0.4.1

以下、省略

この教材を使って学んでます。

posted with カエレバ

関連するブログ:

最近の人気ブログ TOP 10:

最近の記事:

カテゴリー
2021年 Linux NPM Raspberry Pi Riverbed SNMP コンピューター 可視化 技術一般

Raspberry Pi で SNMP エージェントを動かす

PVアクセスランキング にほんブログ村 にほんブログ村 ブログブログへ
にほんブログ村

Network Performance Monitoring(NPM)製品の動作確認をしていて、SNMPポーリングから、対象機器の情報を取得してトポロジーマップを作成するという機能を知りました。

私は、家の各部屋に Cisco スィッチ、インターネットルーターも Cisco ルーターを使っているので、それぞれの機器に SNMP の設定をしたのですが、今回は、Raspberry Pi にも SNMP の設定をしてみました。

私の Raspberry Pi では、Softether VPN サーバーが動いてますので、是非ともトポロジーマップに含めて、どのように表示されるのかが見たかったためです。

今回は、Raspberry Pi で SNMP エージェントを動かす設定を試した時のメモです。

Raspberry Pi OS は、Debian という Linux なので SNMPのエージェントには、Net-SNMP が使われています。

ですが、デフォルトではインストールはされていないようです。

追加インストールします。

$ sudo apt install snmpd

これでインストールは完了です。

次に、Net-SNMP の設定を行います。

設定ファイルは、「snmpd.conf」というファイルになります。保存場所は、/etc/snmp ディレクトリー配下になります。

ファイルを編集する前に、バックアップを取っておきましょう。これは Linux の設定を変更する時の基本ですね。

snmpd.conf ファイルが保存されているディレクトリーに移動します。

cd /etc/snmp

cp (Copy) コマンドで、バックアップファイルを作成します。

sudo cp ./snmpd.conf ./snmpd.conf.bak

作成されましたね。これでいつでも戻せます。

それでは、ファイルを編集して、設定をしていきます。

個人的には、編集の際には、vim を入れておくと便利だと思います。

「AGENT BEHAVIOUR」という項目の、以下の部分のコメントアウトを削除して、有効化します。

sudo vim ./snmpd.conf

コメントアウトを外します。

次に、MIB のアクセス範囲を広げておきます。

「ACCESS CONTROL」の項目の一行目に、以下のように記入しておきます。

最後に、「SYSTEM INFORMATION」の項目で、SysLocation と SysContact を入力しておきます。

基本的にはこれで完了です。

設定を変更しましたので、反映させるために、SNMP のプロセスを再起動しておきます。

sudo service snmpd restart

自分で使っているSNMPマネージャーでアクセスしてみましょう。

私が今回使っているのは、リバーベッドテクノロジー社のSteelCentral シリーズの NetIM という製品です。こいつから、Raspberry Pi に対して、SNMP ポーリングを行います。

Raspberry Pi が表示されました。

対象機器の情報を取得するまでに時間がかかるので、情報取得後に、トポロジーマップを確認してみたいと思います。

関連する記事:

最近の記事:

カテゴリー
2020年 Linux LPIC コマンド コンピューター トラブルシューティング 技術一般 認定資格

Linux の基本コマンドが変更されて困った

2020年09月27日作成

Linux って、コマンド操作が多いのですが、コマンドが変わりましたね。例えば、「ifconfig」で各インターフェースに割り当てられている IP アドレスが見られたのですが、これは「ip address」に変わってます。

これくらいなら、大きな問題にはならないのですが、「nmcli」という Network Service コマンドになると、もうさぱりです。何だたっけ?と、インターネットでその都度調べないと使えません。

私は古いコマンドで Linux を使っていた人ですが、5 年くらい前に対応していたある案件で、久しぶりに Linux を触った時に、「え、何これ?」って感じでした。確か、その時に触ったのが、CentOS 7 だったと思います。

最近は、自宅での動作確認で使用している仮想環境や AWS などのパブリッククラウド上で、Linux を再びよく使うようになりました。やはり、何らかのサーバーを作る際に、Windows よりも Linux が便利である面は多いです。

そこで、迷って Linux のコマンドを確認したい時にすぐに見られるように、ちょっとまとめておこうと思いました。

IP コマンド

オブジェクト省略形    説明
addr aIP アドレスの設定や確認します
link lネットワークデバイスの設定や確認します
route rルーティングテーブルの設定や確認します
neighbor nARP キャッシュの表示します
addr のコマンド省略形    説明
show s指定したデバイスのみのIP アドレス情報を表示します
add aIP アドレスの追加します
del dIP アドレスの削除します

IP アドレスの表示

ip addr / ip a

全てのデバイスの IP アドレス情報を一覧で表示します。

ip addr show <device-name>

デバイス名を指定し、特定のデバイスに割り当てられた IP アドレスの情報を表示します。

以下の例では、ens33 を指定して表示しています。

以下の例では、Loopback インターフェースを指定して表示しています。

IP アドレスの追加と削除

ip addr add <ip-address>/<prefix> dev <device-name>

dev でデバイス名を指定し、指定したデバイスに対して、IP アドレスを追加します。

以下の例では、ens33を指定して、IP アドレスをマニュアルにて設定しています。

ip a で表示してみると、指定した IP アドレスが設定されていますね。

ただ、上書きされると思っていたのですが、追加されるみたいです。これは気をつけないといけない点です。

ip addr del <ip-address>/<prefix> dev <device-name>

dev でデバイス名を指定し、指定したデバイスに対して、IP アドレスの削除を行います。

以下の例では、ens33を指定して、IP アドレスを削除しています。

ip a で表示してみると、指定した IP アドレスが削除されていますね。

疎通確認コマンド

疏通確認

ping

ping は非常によく使用する疏通確認コマンドですが、さすがにこれは変わってませんね。

経路確認

traceroute

宛先ホストに到達するまでの経路情報を表示します。

オプション説明
-UUDP パケットを送信すします(デフォルト)
-IICMP パケットを送信します

Linux の traceroute って、Cisco 機器と同じ様に、デフォルトは UDP なんですね。Windows と同じく ICMP を使っていると思ってました。オプションで切り替えられるのは便利ですね。

以下の例では、Google DNS である「8.8.8.8」に対して、Traceroute を打ってみました。

ついでに、Linux のTraceroute のデフォルトがUDP であることも確かめてみようと思い、隣で動かしているWindows マシンで、Wiresharkを取って見てみました。確かにUDP を使っていますね。TTL exceed などの応答は、ICMP を使うんですね。

「-I 」オプションも試してみましょう。今度はICMPを使ってTraceroute を打つはずです。

Wireshark でパケット見てみると、UDP はなくなり、ICMP のみ見えています。

IPv6 の環境では、traceroute6 コマンドを使用します。

tracepath

宛先ホストに到達するまでの経路情報を表示します。traceroute との違いは、PMTU (Path MTU)を表示できるという点です。

以下の例では、Google DNS である「8.8.8.8」に対して、Tracepath を打ってみました。PMTU の値が表示されていますね。

これもついでに、パケットキャプチャを見てみました。UDP を使っていますね。

ちなみに、私が先日受講した Linux のオンライン講義では、「ICMP を使う」と言っていましたが、実際に見てみるとICMP ではなくUDP を使っています。ここにもそう書いてありますね。

やはり、実機でちゃんと見てみるというのは重要ですね!

ルーティングコマンド

経路情報の確認

ip route

経路情報(ルーティングテーブル)を表示します。昔からの「netstat -r」は非推奨になってしまったみたいです。

以下の例が、ip route の出力結果です。1行しかなく、非常にシンプルですが、NIC が1つでスタティックルートも使っていませんので、PC として使っていれば大体こんなものでしょう。

でも、デフォルトゲートウェイは、どうやって確認しましょうか?

route -n コマンドを使えば良いみたいですね。先日の講義で、route コマンドも非推奨だという話を聞きましたが、インターネットでいろいろ調べてみた限り、そのようなことはなさそうです。とりあえず、デフォルトゲートウェイの確認には、このコマンドを使っておきましょう。

経路情報の追加と削除

オプション説明
addルーティングテーブルに、経路情報を追加します
delルーティングテーブルから、経路情報を削除します
経路情報の追加
ip route add <dest-network> via <gw-ip-addr> dev <device-name>

dev でデバイス名を指定し、ルーティングテーブルに経路情報を追加します。

以下の例が、「10.10.10.0 /24」ネットワーク向けのネクトホップを「192.168.45.2」に設定した出力です。

route -n コマンドでも、追加した経路が見られますね。と言うか、初めから route -n お使っていた方が早い気がしてきました。デフォルトゲートウェイも見られますし。

経路情報の削除
ip route del <dest-network>

ip route del <dest-network> via <gw-ip-addr> dev <device-name>

ルーティングテーブルから、指定した経路情報を削除します。

dev でデバイス名を指定し、特定のデバイスに関連付いているルーティングテーブルに経路情報を削除することもできます。

以下の例が、「10.10.10.0 /24」ネットワーク向けのネクトホップを「192.168.45.2」に設定した経路情報を削除した出力です。

ホスト名の設定

このコマンドは変更された訳ではないですが、個人的に思い出せないことが多いのでメモしておきます。

ホスト名の表示

ホスト名は、/etc/hostnameファイルの中に記載されています。

ホスト名の表示には、hostname コマンドで表示するのと、cat /etc/hostnameとホスト名ファイルを表示する方法があります。

ホスト名の変更

ホスト名の変更には、hostnamectl コマンドを使用します。set-hostname の後に hostnameファルを指定して、ホスト名を変更します。

DNS の設定

DNS で使用するネームサーバーは、/etc/resolve.conf ファイルの中に記載されています。

ネームサーバーの表示

Cat コマンドで、上記ファイルを指定して、内容を表示させます。

ネームサーバーの追加・変更

ネームサーバーは上記ファイルの記載されていますので、vi などのエディターを使って編集すれば、追加・変更が可能です。

ついでに vi エディターですが、最低限のこれくらい知っておけば、とりあえず使えます。

  • i で入力モード
  • ESC ボタンを押して、コマンドモード
  • :wq で保存して終了
  • :q! で終了

NMCLI コマンドは、まだ下書きです。時間のある時に修正していきます。

nmcli コマンド

オブジェクトコマンド説明
なしデバイスの情報を一覧表示
deviceshow <device-name>指定したデバイスの情報のみを表示
connectionshow <connection-name>接続情報を表示
modify <connection-name> <parameter>指定した接続を設定
up <connection-name>接続を有効化
down <connection-name>接続を無効化

IP アドレスの表示

nmcli

各デバイスの IP アドレス情報を表示します。

nmcli show <device-name>

指定したデバイスの IP アドレス情報のみを表示します。

IP アドレスの変更

nmcli connection modify <conn.-name> ipv4.method manual ipv4.addresses <ip-address> / <prefix>

コネクション名を指定して、IP アドレスを設定します。

コネクションの有効化・無効化

nmcli connection up <conn.-name>

設定を反映させるために、コネクションを UP にします。

nmcli connection down <conn.-name>

コネクションを Down させます。

デフォルトデートウェイの設定

nmcli connection modify <conn.-name> ipv4.gateway <default-gw-ip-address>

指定したコネクションに対して、デフオルトゲートウェイを設定します。

nmcli connection modify <conn.-name> ipv4.dns <dns-ip-address>

指定したコネクションの参照先 DNS サーバーのアドレスを設定します。

これを覚えておくと、ちょっと便利です。

IP アドレス、デフォルトゲートウェイ、DNS サーバーのアドレスは、セットで設定することが多い項目です。この様にコマンドを組み合わせることで、これら3つの項目が一度に設定ができます。

nmcli connection modify <conn.-name> ipv4.method manual ipv4.addresses <ip-address> / <prefix> ipv4.gateway <default-gw-ip-addr> ipv4.dns <dns-ip-addr>

これはたまに使うなと思うコマンドあれば、今後も追記して更新していきたいと思います。

関連する記事:

最近の記事:

カテゴリー
2020年 AWS AWS Solutions Architect - Associate クラウド コンピューター 技術一般 認定資格

AWS を学ぶ(17)CloudWatch を使ってみる

このページは、日本語で作成し、機械翻訳で外国語に変換しています。

今回は、CloudWatch について学んでみます。

例えば、何らかのしきい値を超えたらアラートを出し、Eメールで通知するということは、運用上必要だと思います。

この機能を、CloudWatch は、簡単に提供してくれます。

実際に使ってみることが早いですので使ってみました。

CloudWatch を使ってみる

AWS 管理コンソールにログインします。

検索テキストボックスで、CloudWatch と入力すると、CloudWatch が見つかるので、それをクリックします。

CloudWatch の管理コンソールが表示されます。

画面右側のメニューから、「アラーム」をクリックします。

アラーム設定画面が表示されます。

画面右上の「アラームの作成」をクリックします。

メトリクスの設定画面が表示されます。

「メトリクスの選択」をクリックします。

EBS、EC2、S3 などの項目が表示されます。表示される項目は、実際に使っている環境で異なります。

今回は、EC2 インスタンスに対して、アラームを設定したいと思います。EC2 をクリックします。

「インスタンス別メトリクス」をクリックします。

さまざまなメトリクスが表示されます。

とりあえず、分かりやすく、CPU 使用率でアラートを設定してみましょう。

一覧の中から、「CPU Utilization」をクリックします。

対象となるインスタンス ID が表示されています。これは EC2 の仮想インスタンスのインスタンスIDです。EC2 の管理コンソールも同時に開いて確認しましょう。

私の場合、テスト向けのインスタンスである、TEST-amz-linux があります。これのインスタンス名とインスタンス ID が同じであるかを確認します。

「CPU Utilization」を選択すると、現在の対象インスタンスの CPU 使用率が表示されます。

メトリクスの条件と指定の画面が表示されます。

今回は、CPU 使用率をメトリクスとして使用します。そのメトリクスは、AWS が用意しているので、メトリクス名は、そのまま使います。

今回は、CPU 使用率が 70% を超えたらアラートメールを出すようにしようと思います。「しきい値の種類」は、静的にします。

「より大きい」を選択し、「よりも」の項目で「70」を入力します。

まだトピックがありませんので、「新しいトピック」を選択し、「通知を受け取るEメールエンドポイント」に、メールの送信先になるEメールアドレスを入力します。このEメールアドレスが、アラートメールの受け取り先です。

名前と説明の画面が表示されます。

アラームの名前とその説明を入力します。

「次へ」を押すと、設定が完了します。

アクションのところを見ると、まだ「保留中の確認」になってますね。

先ほどメールの送信先に設定したメールを確認してみましょう。AWS からメールが届いているはずです。

メールの本文中にある「Confirm Subscription」をクリックします。

以下のような画面が表示されるはずです。これで、サブスクリプションは完了です。これからアラートメールが飛んできます。

CloudWatch の管理画面に戻ると、先ほど保留中だったステータス項目が、「確認済み」に変わります。

設定は、これで完了です。

CloudWatch のアラートを確認してみる

では、実際にアラートを発生させてみましょう。

今回設定しているのは、「CPU の使用率が 70% を超えたら、Eメールでアラートを出す」です。

Linux の top コマンドで、現在の CPU 使用率を確認してみます。テスト機を使ってますので、現在の CPU 使用率は 0% です。

top

次に、Linux の yes コマンドを使って、CPU 使用率を上げてみたいと思います。

これは不思議なコマンドです。Null にリダイレクトし続けると、CPU 使用率がどんどん上がっていきます。

yes > /dev/null

これを 4つ か 5つ 繰り返すと、すぐに CPU 使用率が上がります。今回は、5つ 繰り返してみましょう。

yes > /dev/null &
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &

すぐに CPU 使用率が 99% まで上昇しました。

しかし、CloudWatch の方は、5分間の平均値で表示しています。すぐには結果が反映されませんので、5分から10分くらい待ってみましょう。

CloudWatch 側でも、CPU 使用率の上昇がみられるようになりました。

アラートメールが飛んでいるはずです。

メールボックスを確認してみると、70% のアラートのメールが届いてますね。動作確認は成功です。

今回は、CPU 使用率でアラートメールを飛ばすように設定してみましたが、CloudWatchは、いろいろなメトリクスが用意されています。いろんなアラートを飛ばして、試してみて下さい。

この教材を使って勉強してます。

AWS認定資格試験テキスト AWS認定ソリューションアーキテクト-アソシエイト

AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト【電子書籍】[ 佐々木 拓郎 ]価格:2,618円
(2020/8/30 16:09時点)
感想(0件)