> For AI agents: the complete documentation index is available at /resource/ucidm/docs/on-premise/dev/llms.txt, the full documentation bundle is available at /resource/ucidm/docs/on-premise/dev/llms-full.txt.

# ログ管理 \{#log}

各コンテナのログをログファイルに出力する際の設定変更手順を示します。
各種デフォルトファイルは弊社RPMパッケージを使ってインストールする際にすべてインストールされます。

[Dockerのログ設定に関するドキュメント](https://docs.docker.com/engine/logging/) もあわせてご確認ください。

## デフォルト設定 \{#default-config}

ログ管理に関するデフォルト設定は以下になります。

|    項目   |                値               |
| :-----: | :----------------------------: |
|  ログ保存先  | `/var/log/osstech/ucidm/*.log` |
| 過去ログ保存先 |  `/var/log/osstech/ucidm/old`  |
|  ログ保存間隔 |      logrotateのデフォルト設定を利用      |
|  ログ保存数  |      logrotateのデフォルト設定を利用      |

ログはコンテナごとに保存され、 `ucidm-<コンテナ名>.log` というファイル名で出力されます。
例えば `server-api` というコンテナのログは `ucidm-server-api.log` というファイルに出力されます。

## カスタム設定 \{#custom-config}

ログ出力に関する設定は以下のファイルに記載されています。

- `/opt/osstech/etc/rsyslog.d/ucidm.conf`

```
template(name="UCIDMDynaFile" type="list") {
  constant(value="/var/log/osstech/ucidm/")
  property(name="syslogtag"
    regex.type="ERE"
    regex.match="0"
    regex.submatch="1"
    regex.expression="(.+)\\[[0-9]+\\]:"
    regex.nomatchmode="ZERO"
    securepath="replace"
  )
  constant(value=".log")
}
if ($syslogtag startswith 'ucidm-') then {
  action(type="omfile" DynaFile="UCIDMDynaFile")
  stop
}
```

これは `/etc/rsyslog.d/osstech.conf` 内でロードされており、rsyslogd設定ファイルとなっております。
ログ出力設定を変更する場合は本ファイル、もしくは `/etc/rsyslog.conf` を編集してください。
ただし、ログを syslog サーバーへ転送する設定はこれらのファイルに書かず、[syslog サーバーへの転送](#forward-to-syslog-server) の手順に従ってください。

ログ保存に関する設定は以下のファイルに記載されています。

- `/opt/osstech/etc/logrotate.d/ucidm`

```
compresscmd zstd
uncompresscmd unzstd

/var/log/osstech/ucidm/*.log
{
    olddir old
    notifempty
    missingok
    sharedscripts
    postrotate
    /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
    endscript
}
```

これは `/etc/logrotate.d/osstech` 内でロードされており、logrotate設定ファイルとなっております。
ログ保存設定を変更する場合は本ファイル、もしくは `/etc/logrotate.conf` を編集してください。

## syslog の facility \{#syslog-facility}

UCIDM の各サービスのログに付く syslog の facility について示します。

### facility の既定値 \{#default-syslog-facility}

UCIDM の各サービスは、ログを標準出力に出力します。
systemd の journald がこのログを受け取り、rsyslog は journald からログを読み込みます。
ログに付く facility は、各サービスの systemd のユニットの `SyslogFacility=` で決まります。

UCIDM のどのユニットも `SyslogFacility=` を指定していないので、facility は systemd の既定値の `daemon` になります。
各ユニットと、ログに付くタグ (`SyslogIdentifier=`) は次のとおりです。

| ユニット                             | タグ               |
| -------------------------------- | ---------------- |
| `osstech-ucidm-api.service`      | `ucidm-api`      |
| `osstech-ucidm-agent.service`    | `ucidm-agent`    |
| `osstech-ucidm-consumer.service` | `ucidm-consumer` |
| `osstech-ucidm-admin-ui.service` | `ucidm-admin-ui` |
| `osstech-ucidm-ui.service`       | `ucidm-ui`       |
| `osstech-ucidm-passsync.service` | `ucidm-passsync` |

ログに付いている facility は、`journalctl` の `-o verbose` の出力にある `SYSLOG_FACILITY` で確認できます。
`3` が `daemon` を表します。

```
# journalctl -u osstech-ucidm-api -o verbose -n 1 | grep SYSLOG_FACILITY
    SYSLOG_FACILITY=3
```

### facility の変更手順 \{#change-syslog-facility}

`local0` から `local7` の facility の割り当てはサイトごとに異なるため、UCIDM のパッケージは既定値の `daemon` のままにしています。
facility を変更する場合は、サービスごとに systemd の drop-in ファイルを作成して `SyslogFacility=` を上書きしてください。

パッケージが配置する `/usr/lib/systemd/system/osstech-ucidm-*.service` は編集しないでください。
パッケージをアップデートすると上書きされます。

例えば UCIDM API の facility を `local0` にする場合は、次のコマンドで drop-in ファイルを作成します。

```
# systemctl edit osstech-ucidm-api
```

エディタが開くので、次の内容を記述して保存します。

```ini
[Service]
SyslogFacility=local0
```

設定を反映するために、サービスを再起動します。

```
# systemctl restart osstech-ucidm-api
```

drop-in ファイルはサービスごとに作成します。
ほかのサービスの facility も変更する場合は、[facility の既定値](#default-syslog-facility) の表にあるユニットごとに同じ手順を実施してください。

変更後の facility は、[facility の既定値](#default-syslog-facility) と同じ `journalctl` のコマンドで確認できます。
`local0` は `16` と表示されます。

## syslog サーバーへの転送 \{#forward-to-syslog-server}

UCIDM のログを syslog サーバーへ転送する設定を示します。

`/opt/osstech/etc/rsyslog.d/ucidm.conf` は、UCIDM のログをファイルに書き込んだあと、`stop` でそれ以降のルールの評価を打ち切ります。
このため、`/etc/rsyslog.d/osstech.conf` より後に評価されるルールには、UCIDM のログが届きません。
例えば `/etc/rsyslog.conf` の末尾に `daemon.* @@logserver.example.com:514` と書いても、UCIDM のログは転送されません。

転送のルールは、`/etc/rsyslog.d/` に `osstech.conf` より前に並ぶ名前のファイルを作成して記述してください。
例えば `/etc/rsyslog.d/10-ucidm-forward.conf` を作成し、次のように記述します。

```
if ($syslogtag startswith 'ucidm-') then {
  action(type="omfwd" target="logserver.example.com" port="514" protocol="tcp")
}
```

このファイルには `stop` を書きません。
転送したあとも `ucidm.conf` のルールが評価され、ログファイルにも書き込まれます。

設定を反映するために、rsyslog を再起動します。

```
# systemctl restart rsyslog
```

## 設定例 \{#custom-example}

いくつかのパラメータの設定変更手順を示します。

### ログ保存間隔変更手順 \{#change-log-rotation-interval}

ログ保存間隔は `/etc/logrotate.conf` で定義されたデフォルト設定をそのまま利用します。
システム全体のデフォルト設定を変更する場合は `/etc/logrotate.conf` を編集してください。
UCIDMのログ保存間隔のみ変更したい場合は `/opt/osstech/etc/logrotate.d/ucidm` を編集してください。

例えばログ保存間隔を1日に1回にする場合は、`daily` を設定に追加してください。

```
compresscmd zstd
uncompresscmd unzstd

/var/log/osstech/ucidm/*.log
{
    daily
    olddir old
    notifempty
    missingok
    sharedscripts
    postrotate
    /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
    endscript
}
```

他には次のパラメータが設定可能です。

- `weekly` 1週間に1度
- `monthly` 1ヶ月に1度

より詳細な設定項目はlogrotateのドキュメントを参照してください。

### ログ保存数変更手順 \{#change-log-rotation-count}

ログ保存数は `/etc/logrotate.conf` で定義されたデフォルト設定をそのまま利用します。
システム全体のデフォルト設定を変更する場合は `/etc/logrotate.conf` を編集してください。
UCIDMのログ保存数のみ変更したい場合は `/opt/osstech/etc/logrotate.d/ucidm` を編集してください。

例えばログ保存数を30世代にする場合は、`rotate 30` を設定に追加してください。

```
compresscmd zstd
uncompresscmd unzstd

/var/log/osstech/ucidm/*.log
{
    rotate 30
    olddir old
    notifempty
    missingok
    sharedscripts
    postrotate
    /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
    endscript
}
```

より詳細な設定項目はlogrotateのドキュメントを参照してください。
