分散環境におけるサーバー運用やセキュリティ監査において、「全システムの時刻が秒単位で正確に一致していること」と「障害発生時の痕跡が漏れなく時系列ログとして記録されていること」は絶対的な前提条件です。LinuC 102試験の主題1.09「システムサービス」では、システム時刻の維持(hwclock, chrony)とシステムログの管理(rsyslog, systemd-journald, logrotate)が重要度合計7で出題されます。本稿では、ハードウェアクロックとNTPの同期構造、ファシリティとプライオリティによるログ振分ルール、journalctlによる高速検索、そしてログローテーションの自動化手法を、実機検証ログとともに論理的に解説します。
- ハードウェアクロック(RTC)とシステムクロック(OS時間)の相違を把握し、
hwclock(--systohc,--hctosys)による同期方向を正確に説明できる状態を目指します - NTPクライアント・サーバー実装である
chronyのアーキテクチャ、設定ファイル(/etc/chrony.conf)、およびchronyc sourcesによる同期確認手法を習得します rsyslogにおけるファシリティ(authpriv,daemon,kern等)とプライオリティ(emerg〜debug)の指定記法を理解しますsystemd-journaldのバイナリログ収集機構と、journalctl(-u,-b,-f,-p)を用いた効率的なログ抽出手順を身につけますlogrotateによるログファイルの世代管理、圧縮(compress)、および日次・週次ローテーション設定を記述できるようにします
| 項目 | 仕様・設定値 |
|---|---|
| 検証機ホスト名 | linuc-node01 |
| ディストリビューション | AlmaLinux 9.8 (Olive Jaguar) |
| NTPデーモン | chrony 4.5 (chronyd.service) |
| NTP同期元 | 192.168.2.137(Stratum 3 ゲートウェイ) |
| ログ管理システム | systemd-journald 252 & rsyslog 8.2310.0 |
| 対象試験 | LinuC レベル1 102試験(主題1.09.1 重要度3 / 主題1.09.2 重要度4) |
目次
1. システム時刻の維持:ハードウェアクロックとchrony
Linuxシステムには、マザーボード上の物理時計と、OSカーネルが管理するソフトウェア時計の2系統の時計が存在します。

1.1 ハードウェアクロック(RTC)とシステムクロックの相違
- ハードウェアクロック(RTC: Real Time Clock / CMOSクロック): マザーボード上に組み込まれた独立チップで、ボタン電池によって給電され、OS停止中や電源OFF時も時刻をカウントし続けます。通常、UTC(協定世界時)基準で時刻を保持します。
- システムクロック(カーネルクロック): Linuxカーネルがメモリ上で維持するタイマーです。OS起動時にRTCから時刻を読み込んで初期化され、稼働中はCPUクロック割り込みに基づいて時間を進めます。
dateコマンドで表示・設定されるのはこの時刻です。
1.2 hwclockコマンドによる時刻同期(–systohc, –hctosys)
2つの時計のズレを解消し、同期を行うコマンドがhwclockです。同期の向きを表すオプションは、LinuC試験で最も取り違えやすい頻出ポイントです。
| オプション(長形式) | 短形式 | 同期の方向と動作 |
|---|---|---|
--show |
-r |
ハードウェアクロック(RTC)の現在時刻を画面に表示する(Read)。 |
--systohc |
-w |
システムクロック ➔ ハードウェアクロック(System TO Hardware Clock: 正確なOS時間をRTCに書き込み保存する)。 |
--hctosys |
-s |
ハードウェアクロック ➔ システムクロック(Hardware Clock TO System: OS起動時のようにRTCの時刻をOSに反映する)。 |
1.3 timedatectlによる時刻・NTP・タイムゾーン統制
systemd環境において、システムクロック、RTC、タイムゾーン、NTP同期の稼働状態を一元管理する統合コマンドが timedatectl です。
[user01@linuc-node01 ~]$ timedatectl
Local time: 火 2026-09-08 07:20:12 JST
Universal time: 月 2026-09-07 22:20:12 UTC
RTC time: 月 2026-09-07 22:20:13
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
NTPによる自動同期を有効化するには sudo timedatectl set-ntp on を実行します。
1.4 chronyアーキテクチャとNTPデーモン(ntpd)との比較優位性
従来の標準であった ntpd は、常時安定したネットワーク接続を前提とし、時刻の緩やかな補正(スルーイング)に長時間を要する設計でした。一方、現代のRHEL/AlmaLinux/Debianで標準採用されている chrony(chronyd デーモン)には以下の優位性があります。
- ノートPCや仮想マシンのように一時停止・再開を繰り返す環境でも、数秒で迅速に時刻同期を完了できます。
- ネットワーク遅延のゆらぎ(ジッター)が大きい環境でも高い精度を維持できます。
1.5 chrony設定ファイル(/etc/chrony.conf)
chronyd の動作を決定する主要ディレクティブです。
server <hostname> iburst: 同期先NTPサーバーを指定。iburstオプションを付与すると、起動直後に短間隔で4〜8回連続パケットを送り初期同期を高速化します。pool <pool_domain> iburst: 複数のNTPサーバーから成るプールを指定。makestep 1.0 3: 起動直後の時刻ズレが1.0秒以上あった場合、最初の3回までの更新に限り、時間を徐々に合わせるのではなく一気にジャンプ(ステップ同期)させて即時補正します。driftfile /var/lib/chrony/drift: システム時計の周波数ズレ(ドリフトレート)を保存し、次回起動時の精度を高めます。
1.6 chronycによる同期状態確認(tracking, sources -v)
chronyc コマンドで稼働中の chronyd に問い合わせを行います。
[user01@linuc-node01 ~]$ chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* _gateway 3 10 377 683 +47us[ +99us] +/- 70ms
先頭の記号の意味:
^: サーバー(server)*: 現在同期中(最優先ソース)であることを示す+: 同期候補(受入可能ソース)-: クラスタ判定で除外されたソース?: 接続不能または非信頼ソース
2. 伝統的ログ管理:rsyslogの仕組みとルール構文
UNIXの伝統的なsyslog規格を拡張し、TCP配送や高信頼キュー処理に対応したログ収集デーモンが rsyslogd です。

2.1 設定ファイル(/etc/rsyslog.conf)のセレクタ構造
/etc/rsyslog.conf の基本ルールは、「セレクタ(ファシリティ.プライオリティ)」と「アクション」のペアで記述されます。
ファシリティ.プライオリティ アクション
*.info;mail.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
2.2 ファシリティ(Facility)の種類一覧
ファシリティとは、ログを発生させたプログラムや機能の分類を表します。
| ファシリティ名 | ログの発生元・役割 |
|---|---|
auth / authpriv |
ユーザー認証、セキュリティ関連(SSHログイン、sudo実行など) |
cron |
crond や atd などのスケジュールジョブ関連 |
daemon |
各種システムデーモン一般 |
kern |
カーネル内部メッセージ |
mail |
メールシステム(Postfix, Sendmail等) |
syslog |
syslogd / rsyslogd 自身の内部メッセージ |
user |
一般ユーザープロセス |
local0 〜 local7 |
システム管理者や独自アプリケーション用に予約されたカスタム領域 |
* |
全ファシリティを対象とするワイルドカード |
2.3 プライオリティ(Severity/Priority)の全8階層
メッセージの重要度・深刻度を表します。上に行くほど重大で、「指定した重要度以上のログがすべて対象となる」のが基本原則です。
| 数値 | プライオリティ名 | 深刻度・意味 |
|---|---|---|
| 0 | emerg(panic) |
緊急事態(システムが使用不可能な状態) |
| 1 | alert |
即時に対処が必要な危険状態(破損データベース等) |
| 2 | crit |
致命的なエラー(ハードウェア障害等) |
| 3 | err(error) |
一般的なエラー |
| 4 | warning(warn) |
警告メッセージ |
| 5 | notice |
正常だが通知すべき重要な情報 |
| 6 | info |
一般的な情報メッセージ(接続ログ等) |
| 7 | debug |
プログラムのデバッグ情報 |
| – | none |
除外(このファシリティのログは記録しない) |
特殊な修飾子:
mail.none: mailファシリティのログを完全に除外する。=: 指定したプライオリティ「のみ」を対象とする(例:kern.=errはerrのみ記録し、crit等は含めない)。!: 指定したプライオリティ以外、または未満を対象とする。
2.4 アクション(Action)の指定
- ファイルパス:
/var/log/messages(先頭にハイフン-/var/log/maillogを付けると非同期書き込みとなり性能向上)。 - リモートsyslogサーバー:
@192.168.1.100(UDP経由で転送)、@@192.168.1.100(TCP経由で高信頼転送)。 - 全ログインユーザー画面:
*(緊急時に全コンソール端末へ一斉同報出力)。
2.5 loggerコマンドによるテストログの手動生成
シェルスクリプトやコマンドラインから任意のファシリティ・重要度でログをテスト出力するコマンドです。
[user01@linuc-node01 ~]$ logger -p local0.info "テストログメッセージ"
3. 現代のログ管理:systemd-journald と journalctl
systemdが稼働する環境では、全サービス、カーネル、初期化プロセスの出力(標準出力・標準エラー出力を含む)が systemd-journald によってバイナリ形式で一元収集されます。
3.1 systemd-journaldのアーキテクチャ
テキストファイルに逐次書き込むrsyslogと異なり、journaldはメタデータ(PID、UID、ユニット名、タイムスタンプ等)を構造化したインデックス付きバイナリとして保持するため、高速な検索と改ざん防止を実現します。
3.2 ログの揮発性と永続化
- デフォルト状態では、ログは
/run/log/journal/配下のRAM(tmpfs)に保持されるため、システムを再起動すると過去のログが消失します。 - 再起動後もログを保存(永続化)するには、
/etc/systemd/journald.conf内でStorage=persistentを設定するか、またはディスク上に/var/log/journal/ディレクトリを作成してデーモンを再起動します。
3.3 journalctlコマンドの主要フィルタリングオプション
バイナリジャーナルを閲覧・検索するための万能コマンドです。
| オプション | 機能・検索条件 | 実行例 |
|---|---|---|
-u <unit> |
指定したsystemdサービスユニットのログのみ抽出 | journalctl -u sshd |
-b |
現在の起動(カレントブート)以降のログのみ表示 | journalctl -b(-b -1 は前回起動時) |
-f |
新しいログをリアルタイムで追跡監視(tail -f 同等) | journalctl -f |
-k |
カーネルメッセージのみ表示(dmesg同等) | journalctl -k |
-p <priority> |
指定した重要度以上のログを抽出 | journalctl -p err |
-n <lines> |
末尾の指定行数のみ表示 | journalctl -n 20 |
--since / --until |
日時や相対時間で期間絞り込み | journalctl --since "2026-09-08 07:00:00" |
4. ログの世代管理と自動ローテーション:logrotate
サーバーが長期間稼働すると、ログファイルが肥大化してディスク容量を圧迫します。これを自動的に分割・圧縮・廃棄する仕組みが logrotate です。
4.1 logrotateの動作原理
logrotate 自体はデーモンとして常駐せず、anacron や cron.daily によって通常1日1回起動されます。
4.2 設定ファイル(/etc/logrotate.conf)の主要ディレクティブ
# /etc/logrotate.d/app の設定例
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
postrotate
/usr/bin/systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
| ディレクティブ | 動作と役割 |
|---|---|
daily / weekly / monthly |
ローテーションの周期(毎日、毎週、毎月)。 |
rotate <count> |
保持するログの世代数(rotate 7 は古い7世代を残し、8世代前を自動削除)。 |
compress |
ローテーション後の古い世代ログをgzipで圧縮保存する。 |
missingok |
対象ログファイルが存在しなくてもエラーを出力せずに処理を続行する。 |
notifempty |
ログファイルが空(0バイト)の場合はローテーションを実行しない。 |
create <mode> <user> <group> |
ローテーション直後、指定したパーミッションと所有者で空の新規ログを作成する。 |
postrotate ... endscript |
ローテーション完了直後に実行するシェルコマンド群を定義する。 |
5. 実機ハンズオン演習:AlmaLinux 9でchrony同期とjournalctl検索を検証
実機linuc-node01において、時刻同期状態の調査とジャーナルログの抽出演習を実施します。
5.1 実機検証環境の確認
chronydとrsyslogの稼働状態を確認します。
[user01@linuc-node01 ~]$ systemctl is-active chronyd rsyslog
active
active
5.2 演習1:chronyc によるNTPサーバー同期状態とStratum階層の確認
現在の同期トラッキング情報を確認します。
[user01@linuc-node01 ~]$ chronyc tracking
Reference ID : C0A80289 (_gateway)
Stratum : 4
Ref time (UTC) : Mon Sep 07 22:12:38 2026
System time : 0.000025353 seconds fast of NTP time
Last offset : +0.000052746 seconds
自ホストがStratum 4であり、上位のゲートウェイ(Stratum 3)と誤差マイクロ秒単位で同期していることが確認できます。
5.3 演習2:loggerコマンドによるカスタムログ送信とrsyslogの受信確認
ユーザー権限で手動ログを発行し、システムログへ反映させます。
# 1. loggerでメッセージを送信
[user01@linuc-node01 ~]$ logger -t MY_AUDIT "LinuC 102 ログ検証テスト実行"
# 2. journalctl で直近のログを確認
[user01@linuc-node01 ~]$ journalctl -t MY_AUDIT -n 1
9月 08 07:25:00 linuc-node01 MY_AUDIT[9400]: LinuC 102 ログ検証テスト実行
5.4 演習3:journalctl による特定サービス(sshd)およびエラーログの抽出
SSHデーモンに関するログのみを抽出し、さらにエラー以上のログを検索します。
# sshd サービスユニットの直近ログを3件表示
[user01@linuc-node01 ~]$ journalctl -u sshd -n 3
-- Boot e5806b16-e6cb-451c-97fa-c9be40171250 --
9月 08 07:20:00 linuc-node01 sshd[819]: Server listening on 0.0.0.0 port 22.
9月 08 07:20:00 linuc-node01 sshd[819]: Server listening on :: port 22.
9月 08 07:24:02 linuc-node01 sshd[9346]: Accepted publickey for user01 from 192.168.2.1 port 54321
# 現在のブートで発生したエラー(err以上)のログを検索
[user01@linuc-node01 ~]$ journalctl -b -p err
-- Boot e5806b16-e6cb-451c-97fa-c9be40171250 --
(エラーが存在しない場合は何も出力されません)
6. LinuC 102試験対策まとめとコマ問頻出チェック
主題1.09における記述式問題(コマ問)の頻出キーワードを総整理します。
6.1 ファシリティ・プライオリティ完全対比表
| 分類 | キーワード | 試験での着眼点 |
|---|---|---|
| ファシリティ | authpriv |
認証情報(/var/log/secure等へ出力) |
| ファシリティ | daemon |
一般的なシステムデーモン |
| ファシリティ | local0 〜 local7 |
ユーザー定義のカスタムログ |
| プライオリティ | emerg |
最高重要度(システム使用不可) |
| プライオリティ | err |
エラー(warningより重大、critより軽微) |
| プライオリティ | info |
情報メッセージ(標準的通知) |
| プライオリティ除外 | none |
mail.none(メールログ除外) |
6.2 コマ問(記述式)頻出キーワード一覧表
LinuC 102試験の記述式問題で特にスペルミスやハイフン忘れが多発する最重要キーワードを整理します。
| 機能区分 | 必須キーワード・記述形式 | 役割と注意点 |
|---|---|---|
| 時刻同期 | hwclock --systohc(-w) |
システム時間 ➔ RTCへの書き込み。方向性の取り違えに注意 |
| 時刻同期 | hwclock --hctosys(-s) |
RTC ➔ システム時間へのロード。起動時の動作 |
| 時刻同期 | chronyc sources -v |
同期中ソースの確認。^*(同期中)と ^+(候補)の判別 |
| ログ管理 | /etc/rsyslog.conf |
syslogルール設定ファイル。セレクタとアクションの定義 |
| ログ管理 | journalctl -u <ユニット> |
特定systemdサービスのログ抽出。-b(ブート)、-f(追尾) |
| ログ管理 | logrotate / /etc/logrotate.conf |
ログ世代交代設定。compress, rotate, weekly |
6.3 本番想定 総合確認演習問題
問1(システム時刻同期シナリオ): AlmaLinux 9サーバーの時刻同期運用に関する以下の設問に答えよ。
- 外部ネットワークと遮断された孤立セグメントにあるサーバを保守している。マザーボード上のハードウェアクロック(RTC)が示す時刻を読み込み、現在のOSシステムクロックへ反映させたい。実行すべき
hwclockのオプション(ロング形式)を答えよ。 chronyc sourcesコマンドを実行したところ、M列(モード)の先頭に^*と表示されたNTPサーバーが存在した。この記号*が意味する状態として適切なものを次の選択肢から選べ。- A: パケットロストが発生し、時刻同期に失敗している
- B: 現在クロック同期のソースとして最適と判定され、選択されている
- C: 候補として検出されているが、別のソースが優先されている
- D: ローカルクロック(自身)を参照している
/etc/chrony.conf内で、起動時にシステムクロックとNTP時刻に大きなズレ(1秒以上)がある場合、微調整(スルーイング)ではなく即座に時刻をジャンプ(ステッピング)させて合わせるディレクティブの記述を選べ。- A:
stepout 1.0 3 - B:
makestep 1.0 3 - C:
jumpclock 1.0 3 - D:
timeshift 1.0 3
- A:
解答と解説を見る
問1 解答・解説
- 設問1の解答:
--hctosys(または短縮形-s)解説: ハードウェアクロック(Hardware Clock = hc)からシステムクロック(System Clock = sys)へ時刻をコピーするため、
hc-to-sys(--hctosys)となります。逆方向の「OS時間をRTCへ保存する」操作は--systohc(-w)です。試験本番では「どちらからどちらへ向かうか」を冷静に分解して解答することが肝要です。 - 設問2の解答: B(現在クロック同期のソースとして最適と判定され、選択されている)
解説:
chronyc sourcesの出力において、行頭の文字はソースの種類(^: サーバー、=: ピア、#: ローカルクロック)を表し、直後の記号は同期状態を表します。*(アスタリスク)は「現在同期元として選択されている最適ソース(Current best source)」、+(プラス)は「結合対象の候補ソース」、-(マイナス)は「候補から除外されたソース」、?(クエスチョン)は「到達不能または接続テスト中」を意味します。選択肢A、C、Dはいずれも誤りです。 - 設問3の解答: B(
makestep 1.0 3)解説: chronyは通常、時間の逆行によるデータベース破損等を避けるため、時計の進みをわずかに加減速させる「スルーイング(Slewing)」で緩やかに時刻を補正します。しかしOS初回起動時などでズレが大きすぎる場合、スルーイングでは追いつかないため、
makestep <しきい値秒> <最大更新回数>を指定して即時時刻修正(ステッピング)を許可します。makestep 1.0 3は「1秒以上のズレがある場合、起動後最初の3回のクロック更新に限りステッピングを行う」という意味になります。
問2(システムログ統制とjournalctl調査シナリオ): システムログの運用・調査に関する以下の設問に答えよ。
/etc/rsyslog.confにおいて、「すべてのファシリティのinfoレベル以上のログを/var/log/messagesに記録するが、メール関連(mailファシリティ)のログだけは除外する」というルールを定義したい。セレクタ部分の正しい記述を答えよ。- Webサーバ(
httpd.service)が深夜に突然停止した。直前のブート(現在の起動セッション)において、httpdサービスから出力されたログのうち、プライオリティがerr(エラー)以上の重要メッセージのみを時系列で確認したい。実行すべきjournalctlコマンドラインを記述せよ。 logrotateの設定において、ログファイルをローテーションした直後にWebサーバプロセスへシグナル(SIGHUP)を送り、新しいログファイルへの書き込みを再開させるために用いるディレクティブの組み合わせとして正しいものを選べ。- A:
prerotate〜endscript - B:
postrotate〜endscript - C:
firstaction〜endaction - D:
restartaction〜endscript
- A:
解答と解説を見る
問2 解答・解説
- 設問1の解答:
*.info;mail.none解説:
*.infoは「全ファシリティ(*)のinfoプライオリティ以上」を指定します。セミコロン(;)で区切って複数のセレクタを連結でき、mail.noneと記述することで「mailファシリティのログを一切記録しない(除外する)」という例外ルールを適用できます。試験ではセミコロンでの連結記法とnoneキーワードが頻出です。 - 設問2の解答:
journalctl -u httpd -b -p err(オプションの順序は任意)解説: サービスユニットの絞り込みには
-u <ユニット名>、ブート単位の絞り込みには-b(現在の起動セッションは-b 0または単に-b)、深刻度での絞り込みには-p <プライオリティ名または数値>(-p errまたは-p 3)を使用します。指定したプライオリティ値「以上」の重大なログ(emerg, alert, crit, err)が抽出されます。 - 設問3の解答: B(
postrotate〜endscript)解説: ログファイルの移動や圧縮が行われた「後」に実行する処理を定義するため、
postrotateとendscriptでスクリプト行を囲みます。デーモンはファイル名ではなくファイル記述子(inode)に対してログを書き込み続けるため、ファイルをリネームしても古いファイルに書き込みを続けてしまいます。そのため、postrotate内で/bin/kill -HUP <PID>やsystemctl reload <サービス>を実行し、新しいファイルを開き直させる設計が実務・試験双方での重要知識です。
6.4 Ping-t演習へのブリッジ(対象分野と推奨学習順)
LinuC 102試験における「システム時刻の維持」と「システムログの管理」(重要度合計7)は、書式記述問題の宝庫です。
- 「システム時刻の維持」分野(重要度3):
hwclock --systohc/--hctosysの方向性、timedatectl set-ntp on、chronyc sourcesの出力記号(^*,^+)、および/etc/chrony.confのmakestepディレクティブの数値を確実に押さえます。 - 「システムログの管理」分野(重要度4): ファシリティとプライオリティの順序、
journalctl -u -b -f -pオプションの組み合わせ、およびlogrotateの主要ディレクティブ(compress,rotate,missingok,postrotate)を正確に記述できるよう演習を反復します。
7. まとめと次回予告
- 時刻管理はハードウェアクロック(RTC)とシステムクロックがあり、同期には
hwclock --systohc(OS➔RTC)やchronyを使用します - chronyは
/etc/chrony.confで設定し、chronyc sources -vで同期状態(^*)を確認します - rsyslogは「ファシリティ.プライオリティ」で制御され、深刻度は
emerg➔debugの順序で規定されます - systemd-journaldはバイナリでログを収集し、
journalctl -u <unit>や-bで高精度に検索します - logrotateによりログの自動分割、世代保存(
rotate)、およびgzip圧縮(compress)が行われます
次回はセキュリティと運用管理を結ぶ主題1.09.3および1.10より、「基本的なセキュリティ管理・暗号化・メール配信(GnuPG公開鍵暗号、SSH鍵認証・多重化、OpenSSL、およびPostfixメール配信)」を詳しく解説します。
LinuC Level 1 学習シリーズナビゲーション
