Debian 10上のGitLabをMuninで監視する

やりたいこと

複数のサーバの負荷状況をmuninで可視化する。

  • muninデータのとりまとめは別サーバで行う
  • 本サーバではサーバの負荷状況&Gitlabの状況を監視する

muninのインストールと設定ファイルの変更

% sudo aptitude install munin munin-node

設定ファイルを修正し、muninの親サーバからアクセスできるようにする。

% cd /etc/munin
% sudo cp -p munin-node.conf munin-node.conf.org
% sudo vi munin-node.conf

変更場所は以下のとおり

% diff munin-node.conf.org munin-node.conf
37a38
> host_name hogehoge.localdomain  #このサーバのFQDNを記載
45c46,47
< allow ^::1$
---
> #allow ^::1$
> allow ^192\.168\.11\.100$  # muninの親サーバのIPアドレスを記載

監視対象の確認

% sudo munin-node-configure

ハードディスクの監視

Debian 9 (Stretch) - munin 各種監視追加! - mk-mode BLOGに従い、設定する。

smartmontoolsのインストール

% sudo apt install smartmontools

ハードディスク監視用の設定の記述。

% sudo touch /etc/munin/plugin-conf.d/hddtemp_smartctl
% sudo vi /etc/munin/plugin-conf.d/hddtemp_smartctl

監視対象とするハードディスクドライブのディスク情報を確認する。私の環境では /dev/sda が監視対象。

% df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
udev             7.8G     0  7.8G    0% /dev
tmpfs            1.6G   17M  1.6G    2% /run
/dev/sda2        900G  6.9G  848G    1% /
tmpfs            7.9G   12K  7.9G    1% /dev/shm
tmpfs            5.0M     0  5.0M    0% /run/lock
tmpfs            7.9G     0  7.9G    0% /sys/fs/cgroup
/dev/sda1        511M  5.1M  506M    1% /boot/efi
tmpfs            1.6G     0  1.6G    0% /run/user/1000

/etc/munin/plugin-conf.d/hddtemp_smartctlの中見

[hddtemp_smartctl]
user root
env.drives sda
env.smartctl /usr/sbin/smartctl
env.args_sda --all -d ata

プラグインを組み込む。

% sudo ln -s /usr/share/munin/plugins/hddtemp_smartctl /etc/munin/plugins/

CPUや電源の監視

lm-sensorsと関連パッケージをインストールする。

% sudo apt -y install lm-sensors libsensors5 fancontrol

sensors-detect を実行する。いいなりにEnterキーをおし、最後の /etc/modulesへの書き込みはYesを選択する。

% sudo sensors-detect 

センサーのチェック

% sudo sensors

センサー監視用の設定ファイルを作成する。

% sudo touch /etc/munin/plugin-conf.d/sensors
% sudo vi /etc/munin/plugin-conf.d/sensors

/etc/munin/plugin-conf.d/sensorsの中見は以下の通り。

[sensors_*]
user root

プラグインを組み込む。

% sudo ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_volt
% sudo ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_temp
% sudo ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_fan

GitLabの監視

GitHub - MatthiasLohr/munin-plugins-gitlab: Munin-plugins for monitoring a GitLab instanceで提供されているプラグインを利用する。Readmeに従い作業する。

関連するパッケージをインストールする。

% sudo apt install python-psycopg2

プラグインをクローンする。

% cd /usr/local/share
% sudo git clone https://github.com/MatthiasLohr/munin-plugins-gitlab.git
% ls -d munin-plugins-gitlab
munin-plugins-gitlab

プラグインの設定ファイルを作成する。

% sudo touch /etc/munin/plugin-conf.d/gitlab
% sudo vi /etc/munin/plugin-conf.d/gitlab

/etc/munin/plugin-conf.d/gitlabの中見は以下の通り。

[gitlab_*]
user git
env.gitlab_dir /var/opt/gitlab    # optional, defaults to GitLab omnibus package
 setup directory
 
## using a PostgreSQL database
env.db_engine postgresql          # optional, defaults to postgres, valid values
: postgresql. mysql
env.db_dsn host=/var/opt/gitlab/postgresql user=gitlab dbname=gitlabhq_productio
n  # optional, defaults to GitLab omnibus database
env.db_pg_search_path gitlab     # optional, set search_path before executing an
y query. Useful if not using GitLab omnibus package
  
## using a MySQL database
#env.db_engine mysql
#env.db_dsn host=localhost user=gitlab db=gitlabhq_production
  
[gitlab_redis_*]
user gitlab-redis
env.redis_socket /var/opt/gitlab/redis/redis.socket  # optional, defaults to Git
Lab omnibus redis instance
  
[gitlab_total_registry_size]
user registry

自分に必要そうなプラグインを導入する。今回は以下を導入した。

% sudo ln -s /usr/local/share/munin-plugins-gitlab/gitlab_redis_used_memory /etc/munin/plugins/
% sudo  ln -s /usr/local/share/munin-plugins-gitlab/gitlab_total_repo_count /etc/munin/plugins/
% sudo  ln -s /usr/local/share/munin-plugins-gitlab/gitlab_total_repo_size /etc/munin/plugins/
% sudo  ln -s /usr/local/share/munin-plugins-gitlab/gitlab_users /etc/munin/plugins/
% sudo  ln -s /usr/local/share/munin-plugins-gitlab/gitlab_users_active /etc/munin/plugins/

Readmeにかかれているとおりにして、Gitlabで使用しているnginxを監視する。

% sudo mkdir -p /etc/nginx/conf.d/
% sudo touch /etc/nginx/conf.d/status.conf
% sudo vi  /etc/nginx/conf.d/status.conf

/etc/nginx/conf.d/status.confの中見は以下の通り。

server  {
    listen *:80;
    listen [::]:80;
    server_name localhost;
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        allow ::1;
        deny all;
    }
}

/etc/gitlab/gitlab.rb の該当部分を修正する。

# nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/example.conf;"
 nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/status.conf;"

設定を再読込する。

% sudo gitlab-ctl reconfigure

プラグインを導入する。

% ln -s /usr/share/munin/plugins/nginx_request /etc/munin/plugins
% ln -s /usr/share/munin/plugins/nginx_status /etc/munin/plugins

munin-nodeを再起動する。

% sudo systemctl restart munin-node

余談:Apacheの監視

% ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
% ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
% ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume

Debian 10上でGitLab

はじめに

これまでCentOS 6で稼働させていたGitLabをDebian 10上に移行する。なお、同一バージョンでないと移行はできないので注意。

Gitlab Omnibus packageのバージョン確認方法

% sudo gitlab-rake gitlab:env:info

System information
System:		Debian 10
Current User:	git
Using RVM:	no
Ruby Version:	2.6.3p62
Gem Version:	2.7.9
Bundler Version:1.17.3
Rake Version:	12.3.3
Redis Version:	3.2.12
Git Version:	2.22.0
Sidekiq Version:5.2.7
Go Version:	unknown

GitLab information
Version:	12.5.1
Revision:	79a183ea8de
Directory:	/opt/gitlab/embedded/service/gitlab-rails
DB Adapter:	PostgreSQL
DB Version:	10.9
URL:		http://192.168.11.2
HTTP Clone URL:	http://192.168.11.2/some-group/some-project.git
SSH Clone URL:	git@192.168.11.2:some-group/some-project.git
Using LDAP:	no
Using Omniauth:	yes
Omniauth Providers: 

GitLab Shell
Version:	10.2.0
Repository storage paths:
- default: 	/var/opt/gitlab/git-data/repositories
GitLab Shell path:		/opt/gitlab/embedded/service/gitlab-shell
Git:		/opt/gitlab/embedded/bin/git

GitLabのCommunity EditionとEnterprise Editionの違い

https://www.gitlab.jp/installation/ce-or-ee/

Debian 10上にGitLab Community Editionをインストール

https://www.gitlab.jp/installation/?version=ce#debianに従い、インストールする。

まず、必要なソフトウェアの準備をする。

% sudo apt install -y curl openssh-server ca-certificates
% sudo apt install postfix (サテライトシステム:メールは他のSMTPサーバ経由で送信)

gitlab-ceに必要なパッケージをインストールする。

% curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

gitlab-ceをインストールする。「https://gitlab.example.com」の部分は自分のサーバのURLを指定する。

sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce

CentOS 6上でのgitlab-ceのバックアップ

https://docs.gitlab.com/ee/raketasks/backup_restore.htmlに従ってバックアップをとる。

以下はバックアップコマンドでバックアップできるとのこと。

  • Database
  • Attachments
  • Git repositories data
  • CI/CD job output logs
  • CI/CD job artifacts
  • LFS objects
  • Container Registry images
  • GitLab Pages content

バックアップコマンドを実行する。バックアップは /var/opt/gitlab/backups以下に生成される。

% sudo gitlab-backup create BACKUP=dump
% ls /var/opt/gitlab/backups
dump_gitlab_backup.tar

また、/etc/gitlabの設定ファイルは上記のバックアップに含まれないので別途バックアップをとる。

% sudo gitlab-ctl backup-etc
% ls /etc/gitlab/config_backup/
gitlab_config_1574853619_2019_11_27.tar
gitlab_config_1574861603_2019_11_27.tar

バックアップしたファイルをDebian 10へもっていく。

リストア

https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installationsに従い、リストアする。

まず、念の為以下のコマンドを実行しておく。

% sudo gitlab-ctl reconfigure
% sudo gitlab-ctl start
% sudo gitlab-ctl stop unicorn
% sudo gitlab-ctl stop sidekiq

% sudo gitlab-ctl status

アプリケーションのバックアップを設置する。

% sudo cp dump_gitlab_backup.tar /var/opt/gitlab/backups/
% sudo chown git:git /var/opt/gitlab/backups/dump_gitlab_backup.tar

リストアする。なお、変数BACKUPの後ろの値は/var/opt/gitlab/backups/の中にあるバックアップファイルのhogehoge_gitlab_backup.tarのhogehogeの部分となる。今回はdump_gitlab_backup.tarなので、BACKUP=dumpとなる。

% sudo gitlab-backup restore BACKUP=dump

次にバックアップをとったgitlab-secrets.jsonとgitlab.rbをコピーする。

% tar xfv gitlab_config_1574861603_2019_11_27.tar
% cd etc/gitlab
% sudo cp gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.old-server
% sudo cp gitlab.rb /etc/gitlab/gitlab.rb.old-server
% cd /etc/gitlab
% cp -p gitlab-secrets.json gitlab-secrets.json.org
% cp gitlab-secrets.json.old-server gitlab-secrets.json
% vi gitlab.rb  (適宜、編集する)

反映させる。

% sudo gitlab-ctl reconfigure
% sudo gitlab-ctl restart
% sudo gitlab-rake gitlab:check SANITIZE=true

辞書攻撃への対応

fail2banで行おうと思った所、GitLab自体にそのような機能があった。

/etc/gitlab/gitlab.rbの該当部分をコメントアウトする。

gitlab_rails['rack_attack_git_basic_auth'] = {
  'enabled' => true,
  'ip_whitelist' => ["127.0.0.1"],
  'maxretry' => 10, # Limit the number of Git HTTP authentication attempts per IP
  'findtime' => 60, # Reset the auth attempt counter per IP after 60 seconds
  'bantime' => 3600 # Ban an IP for one hour (3600s) after too many auth attempts
}

設定を読み込み直す。

% sudo gitlab-ctl reconfigure

cron によるバックアップ

毎日バックアップをとるとして、何世代分バックアップを残すのかを/etc/gitlab.rb で設定する。今回はデフォルトの7世代分とする。該当部分は以下のとおり。

gitlab_rails['backup_keep_time'] = 604800

cronで毎日バックアップをとる。

% sudo su
# crontab -e -u root
0 3 * * * /usr/bin/gitlab-backup create CRON=1
0 4 * * * /usr/bin/gitlab-ctl backup-etc CRON=1

健全性と完全性と機械学習の尺度の関係

健全性(soundness)と完全性(completeness)

ある特徴・性質Cを満たすモノを識別/生成するために提案・構築された手法Mがある。

手法Mの出力の集合をOm、特徴・性質Cを満たすモノの集合をOcとしたとき、

  • OmがOcの部分集合である → 手法Mは健全(sound)である。
    • つまり、手法Mで識別/生成された結果は必ず性質Cを満たしている。
    • でも、手法Mですべての性質Cを識別/生成できるとは保証していない。
  • OcがOmの部分集合である → 手法Mは完全(complete)である。
    • つまり、手法Mですべての性質Cを持つモノを識別/生成できる。
    • でも、手法Mで識別/生成された結果が必ず性質Cを満たしていることは保障していない。
  • OcとOmが等しい → 手法Mは健全であり、完全である。
    • 手法Mで識別/生成された結果は必ず性質Cを満たしている。
    • さらに手法Mですべての性質Cを持つモノを識別/生成できる。

真陽性、偽陽性、真陰性、偽陰性

ある特徴・性質cを満たすモノを識別/生成するために提案・構築された手法Mがあるとする。

理想的には手法Mは健全か完全、あるいは健全かつ完全であることが好ましいが、実際のところそういう手法を開発するのは難しい。実際のところは、以下の図のように、手法Mによって特徴・性質Cを満たすモノの一部を識別/生成できるが、すべてを識別/生成できるわけではない。しかも、特徴・性質Cを満たさないモノについても手法Mは誤って識別/生成してしまう。

f:id:next49:20191126224205p:plain
真陽性、偽陽性、真陰性、偽陰性

  • 真陽性(true positive, TP):手法Mによって「性質Cを満たす」と判定され、かつ、本当に性質Cを満たしている
  • 偽陽性(false positive, FP):手法Mによって「性質Cを満たす」と判定されるが、実際は、性質Cを満たしていない
  • 真陰性(true negative, TN):手法Mによって「性質Cを満たさない」と判定され、かつ、本当に性質Cを満たしていない
  • 偽陰性(false negative, FN):手法Mによって「性質Cを満たさない」と判定さるが、実際は、性質Cを満たしている
性質Cを満たす 性質Cを満たさない
手法Mでは「満たす」判定 真陽性 偽陽性
手法Mでは「満たさない」判定 偽陰性 真陰性

正解率・精度、適合率、再現率・感度、特異度、F値

機械学習で使われる尺度は以下のリンクの通り。
ibisforest.org

  • 正解率・精度(accuracy) = (真陽性 + 真陰性)/ (真陽性 + 真陰性 + 偽陽性 + 偽陰性)
  • 適合率・精度(precision) = 真陽性 / (真陽性 + 偽陽性) = 手法Mが「満たす」と正しく判定出来た数 / 手法Mの判定結果の総数
  • 再現率(recall)・感度(sensitivity) = 真陽性 / (真陽性 + 偽陰性) = 手法Mが「満たす」と正しく判定出来た数 /性質Cを満たすモノの総数
  • 特異度 (specificity) = 真陰性 / (真陰性 + 偽陽性) = 手法Mが「満たさない」と正しく判定出来た数 /性質Cを満たさないモノの総数
  • F値 = (2 × 適合率 × 再現率)/ (適合率 + 再現率)

健全性と完全性と機械学習の尺度の関係

手法Mが健全であるということは、偽陽性になることがないということ。
よって、適合率と特異度が1となる。

手法Mが完全であるということは、偽陰性になることがないということ。
よって、再現率・感度が1となる。

手法Mが健全かつ完全であるということは、偽陽性にも偽陰性にもなることがないということ。
よって、正解率が1、適合率が1、再現率が1、特異度が1、F値が1となる。

機械学習で使われる尺度と検査

手法Mがガン検診の方法、性質Cが当該のガンであるという性質の場合。「1滴の血液から13種類のがんいずれかの有無を99%の精度で検出できる」という説明が何の尺度について話しているの?そもそも、ガンである人の総数が分かるの?(真陽性、真陰性、偽陽性、 偽陰性の数が求められるの?)という話。
natrom.hatenablog.com

Debian 10上でmbox形式をmail_dir形式に移行する

はじめに

Debian 10 (buster)上でPostfixとDovecotを用いてSMTP認証+TLS - 発声練習でIMAPを導入したのでMailBox形式(すべてのメールを1ファイルで管理する)からMailDir形式(1メールを1ファイルで管理する)に移行する。

mb2mdによる移行

移行方法を調べたところ Dovecotのこまんとdoveadmを用いることで変換できるようだったが、いまいち使い方がわからなかったので利用法がわかりやすく、Debian 10のパッケージとして提供されているmb2mdを用いることとした。

メールサーバの停止

PostfixとDovecotを停止する。

% sudo sytemctl stop dovecot
% sudo systemctl stop postfix

Postfixの設定の変更

/etc/postfix/main.cf に以下を追記する。これで新着うメールは /home/ユーザ/Maildir に配送される。

home_mailbox = Maildir/

Dovecotの設定の変更

/etc/dovecot/conf.d/10-mail.confの以下の部分を変更する。

変更前: mail_location = mbox:~/mail:INBOX=/var/mail/%u
変更後: mail_location = maildir:~/Maildir

mb2mdによる変換

メールは /var/mail/ユーザ名 にある。これを ~/home/ユーザ名/Maildirに変換する。

% sudo su
# su ユーザ名
% cd
% mb2md -m -s /var/mail/ユーザ名
% ls -l ~/Maildir/cur

官邸Webサイトの「桜を見る会」のページ

2011年の菅首相および2012年の野田首相のページはなかった。開催されなかったのかな?

1995年(平成7年)は阪神・淡路大震災[16]、2011年(平成23年)は東日本大震災[17]、2012年(平成24年)は北朝鮮の弾道ミサイル発射への対応を理由として中止された[18][19]。
桜を見る会 - Wikipediaより)

それにしても国立国会図書館インターネット資料収集保存事業は優秀。土屋 大洋:日米両国の行政ホームページ利用の進展-三年目の動向と課題-(PDF)によると、首相官邸ホームページは1994年8月に開設とのこと。歴代内閣情報(HP開設以降)をみると、「総理のうごき」というコンテンツができたのは小渕首相からである様子。よって、官邸Webサイト上の「桜を見る会」のページは全部残っているといえる。

 今回の桜を見る会、64回目ですが、ということでございますが、山口さんや皆さんと共に政権を奪還してから、7回目の桜を見る会となりました。12年前にも皆さん忘れておられるかもしれませんが、私1年間総理大臣をやっておりますので、私は総理大臣としては8回目となるわけでございます。

平成30年4月21日、安倍総理は、東京都内の新宿御苑で桜を見る会を開催しました。
安倍総理は、文化・芸能、スポーツなど各界からの招待客を前に、次のように挨拶しました。

平成29年4月15日、安倍総理は、東京都内の新宿御苑で桜を見る会を開催しました。
安倍総理は、文化・芸能、スポーツなど各界からの招待客を前に、次のように挨拶しました。

平成28年4月9日、安倍総理は、東京都内の新宿御苑で桜を見る会を開催しました。文化・芸能、スポーツ界等の代表者などの招待客でにぎわいました。

平成27年4月18日、安倍総理は、東京都内の新宿御苑で桜を見る会を開催しました。文化・芸能、スポーツ界等の代表者などの招待客でにぎわいました。

平成26年4月12日、安倍総理は東京都内の新宿御苑で、桜を見る会を開催しました。文化・芸能、スポーツ界等の代表者など約1万4千人の招待客でにぎわいました。

平成25年4月20日、安倍総理は東京都内の新宿御苑で、桜を見る会を開催しました。文化・芸能、スポーツ界等の代表者など約1万2千人の招待客でにぎわいました。

平成22年4月17日、鳩山総理は東京都内の新宿御苑で、桜を見る会を開催しました。 八重桜の咲く中、文化・芸能、スポーツ界等の代表者等約1万の招待者でにぎわいました。

鳩山総理は、招待客を前に「桜を見ながら、雪も見れるという大変な日になりましたが、ようこそお出ましをいただきました。このような時になると、必ず、私から申し上げる言葉があります。人生には、二人の友がいる。晴天の友と雨天の友である。晴れた時には、人知れず人は集まって来る。しかし、いったん、人生に雨が降ると、一人去り、二人去り、消えてしまうものだと、雨の時に、集まってくれる友こそ、真の友である。雨天の友という言葉がございます。皆様方はこの鳩山政権における、お一人お一人が雨天の友でございます。心からお集まりに感謝を申し上げます。」と挨拶を述べました。

平成21年4月18日、麻生総理は東京都内の新宿御苑で、桜を見る会を開催しました。 見ごろとなった八重桜のもとで、各界の代表者や、文化・芸能、スポーツ界など約1万1千人の招待者でにぎわいました。

平成20年4月12日、福田総理は東京都内の新宿御苑で桜を見る会を開催し、見ごろとなった遅咲きの八重桜と晴れ渡った空のもとで、各界の代表者や、文化・芸能、スポーツ界など約1万人の招待者でにぎわいました。

平成19年4月14日、安倍総理は東京都内の新宿御苑で桜を見る会を開催し、すっきりと晴れ渡った空のもとで、各界の代表者や、文化・芸能、スポーツ界など約1万1千人の招待者でにぎわいました。

 平成18年4月15日、総理主催の「桜を見る会」が東京都新宿区の新宿御苑で開催され、政財界や文化・芸能、スポーツ界など約11,000人の招待者でにぎわいました。

平成17年4月9日、総理主催の「桜を見る会」が東京都新宿区の新宿御苑で開催され、政財界や文化・芸能、スポーツ界など約8,700人の招待者でにぎわいました。

平成16年4月17日、総理主催の「桜を見る会」が東京都新宿区の新宿御苑で開催され、政財界や文化・スポーツ界など約8000人の招待者でにぎわいました。

平成15年4月19日、総理主催の「桜を見る会」が新宿御苑で開催され、政財界や文化・スポーツ界、国際貢献・国際ボランティア関係者など、招待者でにぎわいました。

平成14年4月20日、総理主催の「桜を見る会」が新宿御苑で開催され、政財界や文化、スポーツ界関係者など約8,000人の招待者でにぎわいました。

総理主催の「桜を見る会」が、平成13年4月21日午前、東京の新宿御苑で、政財界や文化、スポーツ界関係者、国際貢献及び国際ボランティアに参加した人達約1万人を招いて開催されました。森総理は、八重桜の下で、招待客らとの握手や記念撮影に気さくに応じました。

総理主催の「桜を見る会」が、平成12年4月15日午前、東京の新宿御苑で、政財界や文化、スポーツ界関係者、国連平和維持活動に参加した隊員ら約8500人を招いて開催された。森総理は「いろいろな問題をしっかり受けとめ、日本の新生を図っていきたい」とあいさつし、八重桜の下で、招待客らとの握手や記念撮影に気さくに応じた。

小渕総理は東京の新宿御苑で恒例の「桜を見る会」を開催し、政財界をはじめ、各国大使やスポーツ選手、文化人など約1万1000人の招待者でにぎわった。