プロジェクト

全般

プロフィール

003_Redmine4.2(Redmine5.x)のログを設定する。

バージョン 9 (手動人形, 2023/02/09 13:25) → バージョン 10/10 (手動人形, 2024/10/15 09:28)

{{TOC}}

### ## 本記事で実施すること

- Apache設定ファイルを編集し、アクセスログとエラーログをRedmineのlogディレクトリに保存されるようにする。
- ログローテーションの設定を行う。
- Redmineのプラグインを利用して、Web UIからログを参照できるようにする。

### ## 想定している読者

- Redmineのアクセスログ / エラーログを気軽に閲覧したい。

### ## 前提

以下の環境で動かしています。

- Ubuntu 20.04系
- Ubuntu 22.04 / Ubuntu 24.0でも動作確認済み

- Redmine 4.2
- Redmine5.0でも動作確認済み(2023/02/09)
- Apache 2.4

#### ### 特記事項

テキストエディタを使って編集する箇所があります。必ずバックアップを取得し、失敗したときに切り戻しができるようにしましょう。



## 手順

### さっくりとした手順

1. Apacheの設定ファイルを編集し、redmineの稼働ディレクトリにログを流すようにします。
2. rsyslogを編集して日ごとにログを設定します。
3. Redmineのプラグインをインストールして、管理画面からログを閲覧できるようにします。

#### Apache設定ファイルのバックアップを取ります。

- Apacheバーチャルサイトの設定ファイル格納ディレクトリに移動

```bash
cd /etc/apache2/sites-available && pwd
```

`/etc/apache2/sites-available`
# /etc/apache2/sites-available にいることを確認します

- 設定ファイルバックアップ

```bash
sudo cp -pi redmine.conf /path/to/backup/directory/redmine.conf.$(date ../old/redmine.conf.$(date +%Y%m%d)
``` # 設定ファイルの名前は自分の環境に合わせます
# バックアップに /etc/apache2/old を指定しています
# なければ作るか、他に任意の場所を指定します
# 変数を付けることで、ファイル名にYYYYMMDD形式が付与されます


任意のバックアップディレクトリを指定します。

- バックアップ確認

```bash
diff -u /path/to/backup/directory/redmine.conf.$(date redmine.conf ../old/redmine.conf.$(date +%Y%m%d) redmine.conf
# 差分が無いことでバックアップの取得を確認します
```

差分が無いことでバックアップの取得を確認します。

#### /var/log配下にシンボリックリンクを張ります。

- ディレクトリ移動

```bash
cd /var/log && pwd
``` # /var/logにいることを確認します

`/var/log`にいることを確認します

- シンボリックリンク作成

```bash
sudo ln -sf /home/www-data/redmine/log/ redmine
``` # ログの格納場所は自分の環境に合わせます

ログの格納場所は自分の環境に合わせます。

- リンク作成確認

```bash
ls -l redmine
# 所有者が設定したRedmineのログディレクトリに向き先があることを確認します
```

Redmineのログディレクトリに向き先があることを確認します



#### Apache設定ファイルを編集します。

- ファイル編集 ```bash
sudo vi /etc/apache2/sites-available/redmine.conf
# 教義・信仰に従ったエディタで編集してください。
```


`/etc/apache2/sites-available/redmine.conf`

を教義・信仰に従ったエディタで編集してください。(要管理者権限)

##### 追記内容

```apache
CustomLog /home/www-data/redmine/log/access.log combined
ErrorLog /home/www-data/redmine/log/error.log
# Redmineが配置されているディレクトリ/logに合わせます

# 追記箇所は
# <VirtualHost *:443>
# ServerName [ドメイン名] の下
# CustomLog /home/www-data/redmine/log/access.log combined
# ErrorLog /home/www-data/redmine/log
#
# 常時SSL化しているため、HTTP通信のアクセスログは設定しません
```

#### 差分を確認します。

```bash
diff -u /path/to/backup/directory/redmine.conf.$(date ../old/redmine.conf.$(date +%Y%m%d) redmine.conf
/etc/apache2/sites-available/redmine.conf
```

##### 差分

```diff
<VirtualHost *:443>
ServerName Redmineドメイン名
+ CustomLog /home/www-data/redmine/log/access.log combined
+ ErrorLog /home/www-data/redmine/log/error.log
+
```

#### 設定を反映します。

- 構文確認

```bash
sudo apache2ctl configtest
``` # Syntax OKを確認します

`Syntax OK`を確認します。

- Webサービス再起動

```bash
sudo systemctl restart apache2.service
```

#### ログが流れることを確認します。

```bash
tail -f /home/www-data/redmine/log/access.log
# 自分の環境に合わせます
```

このコマンドを発行し、何回かRedmineサイトにアクセスし、ログが正常に出ていることを確認します。

#### ログの所有者を変更します

```bash
sudo chown www-data:www-data /home/www-data/redmine/log/*.log /home/www-data/redmine/log/access.log
sudo chown www-data:www-data /home/www-data/redmine/log/error.log
```

この処理は、Redmineのログ閲覧プラグインの設定で必要です。

#### ### ログローテーション設定

- 【】内は自分の環境に合わせます。

```bash
cat <<- __EOF__ | sudo tee -a /etc/logrotate.d/redmine
【/var/log/redmine/】*.log {
daily
missingok
ifempty
copytruncate
rotate 10
compress
su www-data www-data
}
__EOF__
```

これで、

- 日ごとにログをローテーションする
- 10世代保存
- ローテーション時に保存
- ログが書かれていなくても処理を続行

などの処置を行います。

#### 動作確認

```bash
sudo logrotate -dv /etc/logrotate.d/redmine
```

エラーがないことを確認します

### Redmineのログ閲覧プラグインをインストールします。

#### プラグインインストール、設定反映

- Redmineのプラグイン配置ディレクトリに移動

```bash
cd /home/www-data/redmine/plugins && pwd
```

# 自分の環境に合わせます。pluginsディレクトリにいることを確認します。

- git clone

```bash
sudo -u www-data git clone https://github.com/haru/redmine_logs
```


- clone確認

```bash
ls- ld redmine_logs
```

ディレクトリがあることを確認します。

- Webサービス再起動

```bash
sudo systemctl restart apache2.service
```

#### ログ確認

1. Redmineに管理者アカウントでログインします。
2. 管理>ログに遷移します。
3. 任意のログをクリックして閲覧できることを確認します。
クリップボードから画像を追加 (サイズの上限: 50 MB)