2017年12月11日月曜日

タスクスケジューラーを使って1分間隔で実行するタスクを作成する方法

とあるPowerShellのスクリプトを1分間隔で実行したかったので、タスクスケジューラーで繰り返し実行のタスクを作ることにした。しかし、「トリガー」タブの「繰り返し間隔」の選択項目を見ると、5分間より短い間隔の指定ができないように見える。


Linuxのcronであれば簡単に設定できることが、タスクスケジューラーではできないのかと困っていたのだが、実はこの「繰り返し間隔」は直接入力が可能である。

というわけで、試しに「5 分間」→「1 分間」に編集して保存してみる。


「詳細」欄を確認すると、「00:01:00 ごとに繰り返し」となっている。


実際にタスクを作成して、「次回の実行時刻」を確認すると、1分後が指定されていることが確認できた。


ちなみに、1分以下を指定できるか確認したところ、「繰り返し間隔は、1 分以上 31 日以下の値を指定する必要があります」というエラーメッセージではじかれた。Windowsのタスクスケジューラーの最少実行間隔は、1分のようだ。



2017年12月9日土曜日

rsyslog + logrotateでログ保管サーバーを構築する

ネットワーク機器などの障害調査を目的として、Syslogでログ転送を行いログを保管しておくという設計はよくある話ではある。有名な製品としては、Spulnk社のSplunk、インフォサイエンス社のLogstorage、OSSではGraylogやLogtashなど多数のソフトウェアが存在している。

とはいえ小規模な環境で有償のソフトウェアを導入することは、費用面や構築負荷といった面で割に合わないこともあるため、とりあえずログを保管するだけで詳細な分析は不要であれば、OSの標準機能で実装してしまう方が手っ取り早い。

今回はLinuxの標準機能であるrsyslogとlogrotateを組み合わせて、ログ保管サーバーの構築を行う。

環境

今回は仮想スイッチVyOSのログをSyslogにて受信し、5日分のログを保管できるように設定することにする。


参考までに、VyOSのSyslog設定を以下に記載する。

# show system syslog
------------------------------
 global {
     facility all {
         level notice
     }
     facility protocols {
         level debug
     }
 }
 host 192.168.33.22 {
     facility all {
         level debug
     }
 }
------------------------------

rsyslogの設定

UDP/514ポートを使ったSyslog受信設定を行ったうえで、送信元のIPアドレスをもとに出力ファイルを指定する。

設定は以下の通りとなる。

# cat /etc/rsyslog.conf | grep -v -e "^#" -e "^$"
------------------------------
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
$ModLoad imudp     ←UDPによるSyslogメッセージ入力を許可
$UDPServerRun 514   ←UDPの待ち受けポートを514に設定
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
:fromhost-ip, isequal, "192.168.33.31" -/var/log/t3031vy11.log
& ~
↑送信元IPアドレスに対して、出力先のログを指定。"& ~"を付けることで、直前の条件に一致したログを破棄する
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*
------------------------------

:fromhost-ipの行はプロパティベースのフィルターと呼ばれる。構文は以下の通りとなる。

:PROPERTY, [!]COMPARE_OPERATION, "STRING" LOGFILE

左から順に見ていこう。

①PROPERTY

今回はIPアドレスでフィルターするため、「fromhost-ip」で指定する。利用できるPROPERTYの値は以下を参照。

・rsyslog Properties
http://www.rsyslog.com/doc/master/configuration/properties.html

②[!]COMPARE_OPERATION, "STRING"

今回はIPアドレスで「一致」を条件とするため、「isequal, "192.168.33.31"」とする。isequalの前に!を付ければ否定となり「一致しないこと」が条件となる。その他比較処理については、以下表を参照すること。

  • contains:テキストを含む。大文字小文字を区別する
  • contains_i:テキストを含む。大文字小文字を区別しない
  • isequal:テキストと一致
  • regex: POSIX BRE (Basic Regular Expression)による比較
  • ereregex: POSIX ERE (Extended Regular Expression) 正規表現による比較
  • isempty:空かどうかを比較 (この際の”STRING"の記載方法が不明)

③LOGFILE

出力先のログファイルを指定する。ログファイル名の前に「-」を指定すると書き込みが非同期で行われ、パフォーマンスが向上するが、サーバー停止時に一部ログの欠損が発生する可能性がある。

logrotateの設定

以下の内容でファイルを新規作成する。今回は日次5世代のローテーション設定を行う。

# cat /etc/logrotate.d/remotelog
------------------------------
/var/log/t3031vy11.log {
    missingok      ←ログファイルが存在しない場合でもエラーとしない
    notifempty     ←ログファイルが空ならローテーションしない
    daily        ←日次で実行
    compress      ←圧縮。デフォルトではgzを圧縮コマンドとして利用
    rotate 5      ←5世代の過去ファイルを保管
    postrotate     ←ローテーション後コマンド(次行~endscriptまで)を実行
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript      ←コマンドの終わり
}
------------------------------

このファイルの作成ディレクトリである/etc/logrotate.dは、/etc/logrotate.confでインクルードされているため、ファイルを置くだけで設定を反映することができる。

なお、logrotateはただのコマンドとして提供されており、サービス化されていない。そのため、設定反映の際に、サービス再起動や設定ファイルの再読み込み作業は不要となる。

設定確認コマンドは以下の通りとなる。

# logrotate -d /etc/logrotate.conf
------------------------------
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file ConsoleKit
reading config info for /var/log/ConsoleKit/history

~(中略)~

reading config info for /var/log/t3031vy11.log

~(中略)~

rotating pattern: /var/log/t3031vy11.log  after 1 days (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/t3031vy11.log
  log does not need rotating
not running postrotate script, since no logs were rotated

~(以下略)~
------------------------------

logrotateの実行時間について

ここでlogrotateの実行時間についても記載しておく。logrotateはanacronで制御されており、日次、週次、月次の実行処理があらかじめ設定されている。

実際にanacronの実行制御の設定を見てみる。

# cat /etc/anacrontab
------------------------------
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
RANDOM_DELAY=45       ←各ジョブのdelay in minutes + 最大45分の遅延
START_HOURS_RANGE=3-22   ←3時-22時の間でジョブを実行(サーバー停止等がなければ3時開始)

#period in days delay in minutes job-identifier command
1       5       cron.daily       nice run-parts /etc/cron.daily  ←日次処理
7       25      cron.weekly      nice run-parts /etc/cron.weekly  ←週次処理
@monthly 45     cron.monthly     nice run-parts /etc/cron.monthly  ←月次処理
------------------------------

上記より、日次処理の場合、3:05~3:50の間でlogrotateが実行されることがわかる。

次に、日次処理の設定ファイルが配置されている/etc/cron.dailyディレクトリ内のlogrotateファイルの設定を確認する。logrotateコマンドを実行し、終了コードが0以外の際にloggerコマンドでエラーを吐くという、シンプルなスクリプトとなっている。

# cat /etc/cron.daily/logrotate
------------------------------
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf   ←logrotateコマンドを実行
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
------------------------------

実際に作成されたログファイルを確認してみると、3:05~3:50の間でgz形式で圧縮されたファイルが5つ生成されていることがわかる。

# cd /var/log/
# ls -l t3031vy11.log*
------------------------------
-rw------- 1 root root 1233016 12月  4 10:06 2017 t3031vy11.log
-rw------- 1 root root  305117 11月 30 03:48 2017 t3031vy11.log-20171130.gz
-rw------- 1 root root  229191 12月  1 03:44 2017 t3031vy11.log-20171201.gz
-rw------- 1 root root  262123 12月  2 03:29 2017 t3031vy11.log-20171202.gz
-rw------- 1 root root  373297 12月  3 03:49 2017 t3031vy11.log-20171203.gz
-rw------- 1 root root  294881 12月  4 03:25 2017 t3031vy11.log-20171204.gz
------------------------------

参考

・rsyslog
http://www.rsyslog.com/

・20.2. RSYSLOG の基本設定
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-basic_configuration_of_rsyslog

・第21章 システムタスクの自動化
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/ch-automating_system_tasks

2017年12月5日火曜日

商用OSのEOSを調べてみた!2017年末版

顧客へシステム更改の提案をする際に、最低5年はサポート可能なOSの選定が必須となることが多く、念のためサポート期限(EOS : End Of Support)を調べることがよくある。

面倒になったので、本記事でいつでも参照できるようにまとめることにした。2018年にサポート期限を迎える製品については、赤字で強調表示した。

今回調査した商用OSは以下の通り。SUSEが無いとか、Solarisが無いとか、いろいろ意見があると思うが、私が個人的によく使うOSのみに絞らせてもらった。

  • Windows (PC用)
  • Windows Server
  • vSphere
  • Red Hat Enterprise Linux
  • AIX
  • HP-UX

なお、本記事で「EOS」と表現する場合は、製品として完全にすべてのサポートが終了する期限を指すことにする。例えば、通常サポートが終了しても延長サポートが存在するような場合は、EOSとは表現しない。

Windows (PC用)

2018年になっても即座にEOSとなるOSは無い。Windows 7に関しては、2020年まで延長サポートが続くこともあり、Windows 10に切り替える企業は2018年も少数であると想定される。

・製品のライフサイクルの検索
https://support.microsoft.com/ja-jp/lifecycle/search

・ご存知ですか?OS にはサポート期限があります!
https://www.microsoft.com/ja-jp/atlife/article/windows10-portal/eos.aspx

・Windows 7 SP 1
延長サポート:2020/01/14 (SP1必須)

・Windows 8.1
メインストリームサポート:2018/01/09
延長サポート:2023/01/10

・Windows 10
メインストリームサポート:2020/10/13
延長サポート:2025/10/14


Windows Server

Windows Serverも2018年に即座にEOSとなる製品は無い。どちらかというと、HWやOS上のアプリケーションのEOSが先に来てしまい、更改するということが多いと思われる。2018年10月までであれば、そこからまだ5年の延長サポートがWindows Server 2012には残っており、Windows Server 2016を使うかどうか判断に悩むこともあるかもしれない。

・製品のライフサイクルの検索
https://support.microsoft.com/ja-jp/lifecycle/search

・Windows Server 2008 R2 SP1
延長サポート:2020/01/14 (SP1必須)
※プレミアムアシュアランスによる6年の追加サポートが可能な模様
・Introducing Windows Server Premium Assurance and SQL Server Premium Assurance
https://cloudblogs.microsoft.com/hybridcloud/2016/12/08/introducing-windows-server-premium-assurance-and-sql-server-premium-assurance/

・Windows Server 2012 / Windows Server 2012 R2
メインストリームサポート:2018/10/09
延長サポート:2023/10/10

・Windows Server 2016
メインストリームサポート:2022/01/11
延長サポート:2027/01/11

vSphere

VMware製品のEOS情報は、以下URLにてPDFにまとめられており、大変わかりやすい。EOSは発売からきっかり7年と設定されている。2018年はESXi 5.0 / ESXi 5.1がEOSとなってしまうことが大きなイベントとなる。

・VMware Lifecycle Product Matrix
https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/support/product-lifecycle-matrix.pdf

ESXi 5.0 / ESXi 5.1 / vCenter Server 5.0 / vCenter Server 5.1
END OF GENERAL SUPPORT:2016/08/24
END OF TECHNICAL GUIDANCE:2018/08/24

・ESXi 5.5 / vCenter Server 5.5
END OF GENERAL SUPPORT:2018/09/19
END OF TECHNICAL GUIDANCE:2020/09/19

・ESXi 6.0 / vCenter Server 6.0
END OF GENERAL SUPPORT:2020/03/12
END OF TECHNICAL GUIDANCE:2022/03/12

・ESXi 6.5 / vCenter Server 6.5
END OF GENERAL SUPPORT:2021/11/15
END OF TECHNICAL GUIDANCE:2023/11/15

Red Hat Enterprise Linux

Red Hat Enterprise Linuxはかなりサポート期間が長い。例えば、2007年3月に発表されたRed Hat Enterprise Linux 5であっても、2020年までサポートが可能となっている (ただし、延長ライフサイクルサポート(ELS)アドオンと呼ばれる有料サポートの契約が必要)。

・Red Hat Enterprise Linux Life Cycle
https://access.redhat.com/support/policy/updates/errata

・Red Hat Enterprise Linux 5
End of Extended Life-cycle Support:2020/11/30

・Red Hat Enterprise Linux 6
End of Production 3:2020/11/30
End of Extended Life-cycle Support:2024/06/30

・Red Hat Enterprise Linux 7
End of Production 3:2024/06/30
End of Extended Life-cycle Support:未発表

AIX

AIXはTL (Technology Level)毎にサポート期限が異なる。本記事では各メジャーバージョンの最新TLのEOSを記載する。

・AIX support lifecycle information
https://www-01.ibm.com/support/docview.wss?uid=isg3T1012517

・AIX 7.1 TL5
End of Service Pack Support :2022/04/30

・AIX 7.2 TL2
End of Service Pack Support :2020/10/31 (予想)

HP-UX

HP-UXはあまり頻繁なバージョンアップはなく、2007年4月に発表されたHP-UX 11i v3が未だに最新という状況となっている。

・長期間利用のための開発方針とサポートポリシー
https://h50146.www5.hpe.com/products/software/oe/hpux/topics/support/

・HP-UX 11i v2
サポート終了:2019/12月

・HP-UX 11i v3
サポート終了:未発表

参考

・End Of Support (EOS) の調べ方
https://tech-mmmm.blogspot.jp/2015/04/end-of-support-eos.html

人気の投稿