🎄

sardine を利用して Mackerel サービスメトリック を定期的に投稿する作戦

2023/12/23に公開

本記事は Mackerel Advent Calendar 2023 の23日目のエントリです。[1]

こんにちは。Mackerel Ambassador を拝命いただきながらブログ投稿が年1で恐縮です。来年はもっと貢献したいと思います。ちなみに一覧は こちら

sardine とは

さて、今日は、大変便利と思っている Mackerel サービスメトリック をいい感じに活用できるツール、sardine を紹介したいと思います。

作者(@fujiwara さん)による紹介ブログはこちら(2018年3月)
https://sfujiwara.hatenablog.com/entry/2018/03/27/132306

この記事で紹介する事例

自分は 2020 年から活用してまして、
https://esa-pages.io/p/sharing/6641/posts/799/7749ccbd8d0d242b410b.html

自宅の RaspberryPi で運用してました[2] が、最近ついにその RasPi を利用停止して(音が凄いことになった)、思いつきでとあるミニPCにリプレースしました。2023年の最新情報として、Ubuntu に mackerel-agent と sardine をインストールしてサービスメトリック投稿を自動化する過程の概要を共有します。

ミニPCに Ubuntu をインストール

買ったのは↓でした。自分の情報収集力が高くなかったのかもしれないですが、Ubuntu をサポートしているミニPCを探した結果これになりました。
https://www.amazon.co.jp/gp/product/B0C55JQ8HG

ミニPCに初期インストールされている Windows から Ubuntu に入れ替えるのは直近の技術書典で見つけた↓を見てなんとなくやりました。
https://techbookfest.org/product/acDEiEkecd1nmLNzFcJ2aZ?productVariantID=he3cqppETTNRg5mNwTW4eF

mackerel-agent 導入

https://mackerel.io/orgs/${your-organization}/instruction から ホストの登録 を辿り、
https://mackerel.io/orgs/${your-organization}/instruction-agent の Ubuntu・Debian に提示されたコマンドを実行、で完了しました。

install mackerel-agent

root@XXX-ubuntu-10:/tmp# wget -q -O - https://mackerel.io/file/script/setup-all-apt-v2.sh | MACKEREL_APIKEY='${MACKEREL_API_KEY}' sh
Superuser authority is required to setup Mackerel agent:
+ command -v curl
/snap/bin/curl
+ http_get=curl -LfsS
+ [ curl -LfsS =  ]
+ dpkg --get-selections gnupg
+ grep [[:space:]]install
+ [ -z gnupg                                            install ]
+ mkdir -p /etc/apt/keyrings/
+ curl -LfsS https://mackerel.io/file/cert/GPG-KEY-mackerel-v2
+ gpg --dearmor -o /etc/apt/keyrings/mackerel-v2-archive-keyring.gpg
+ echo deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/mackerel-v2-archive-keyring.gpg] http://apt.mackerel.io/v2/ mackerel contrib
+ apt-get update -qq
+ apt-get install -y mackerel-agent
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  mackerel-agent
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 3 個。
2,093 kB のアーカイブを取得する必要があります。
この操作後に追加で 6,237 kB のディスク容量が消費されます。
取得:1 http://apt.mackerel.io/v2 mackerel/contrib amd64 mackerel-agent amd64 0.78.0-1.systemd [2,093 kB]
2,093 kB を 0秒 で取得しました (10.6 MB/s)
以前に未選択のパッケージ mackerel-agent を選択しています。
(データベースを読み込んでいます ... 現在 207668 個のファイルとディレクトリがインストールされています。)
.../mackerel-agent_0.78.0-1.systemd_amd64.deb を展開する準備をしています ...
mackerel-agent (0.78.0-1.systemd) を展開しています...
mackerel-agent (0.78.0-1.systemd) を設定しています ...
Created symlink /etc/systemd/system/multi-user.target.wants/mackerel-agent.service → /lib/systemd/system/mackerel-agent.service.
+ mackerel-agent init -apikey=${MACKEREL_API_KEY}
+ systemctl start mackerel-agent
*************************************

     Done! Welcome to Mackerel!

*************************************
root@XXX-ubuntu-10:/tmp# systemctl status mackerel-agent
● mackerel-agent.service - mackerel.io agent
     Loaded: loaded (/lib/systemd/system/mackerel-agent.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-11-14 14:27:04 JST; 23s ago
       Docs: https://mackerel.io/
    Process: 8397 ExecStartPre=/bin/mkdir -m 777 -p $MACKEREL_PLUGIN_WORKDIR (code=exited, status=0/SUCCESS)
   Main PID: 8398 (mackerel-agent)
      Tasks: 14 (limit: 18828)
     Memory: 8.2M
        CPU: 111ms
     CGroup: /system.slice/mackerel-agent.service
             ├─8398 /usr/bin/mackerel-agent supervise --root /var/lib/mackerel-agent
             └─8405 /usr/bin/mackerel-agent --root /var/lib/mackerel-agent -child

1114 14:27:04 XXX-ubuntu-10 systemd[1]: Starting mackerel.io agent...
1114 14:27:04 XXX-ubuntu-10 systemd[1]: Started mackerel.io agent.
1114 14:27:04 XXX-ubuntu-10 mackerel-agent[8405]: 2023/11/14 14:27:04 INFO <main> Starting mackerel-agent version:0.78.0, rev:8acc11d, apibase:https://api.mackerelio.com
1114 14:27:12 XXX-ubuntu-10 mackerel-agent[8405]: 2023/11/14 14:27:12 INFO <command> Start: apibase = https://api.mackerelio.com, hostName = XXX-ubuntu-10, hostID = 519rCeEKsXJ
root@XXX-ubuntu-10:/tmp#
root@XXX-ubuntu-10:/tmp# systemctl is-enabled mackerel-agent
enabled
root@XXX-ubuntu-10:/tmp#

mkr・mackerel-agent-plugins・go-check-plugins のインストール

機構の中で以前から利用していたっぽいので入れていきました。

install mkr

公式ガイドもありますが、だいたいは GitHub のリポジトリを見て初期設定したような記憶です。
https://github.com/mackerelio/mkr


root@XXX-ubuntu-10:/tmp# apt-get install mkr
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  mkr
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 3 個。
3,366 kB のアーカイブを取得する必要があります。
この操作後に追加で 10.6 MB のディスク容量が消費されます。
取得:1 http://apt.mackerel.io/v2 mackerel/contrib amd64 mkr amd64 0.53.0-1.v2 [3,366 kB]
3,366 kB を 0秒 で取得しました (8,108 kB/s)
以前に未選択のパッケージ mkr を選択しています。
(データベースを読み込んでいます ... 現在 207678 個のファイルとディレクトリがインストールされています。)
.../mkr_0.53.0-1.v2_amd64.deb を展開する準備をしています ...
mkr (0.53.0-1.v2) を展開しています...
mkr (0.53.0-1.v2) を設定しています ...
root@XXX-ubuntu-10:/tmp# mkr --version
mkr version 0.53.0 (rev:5d3ac17)
root@XXX-ubuntu-10:/tmp#
install mackerel-agent-plugins

https://github.com/mackerelio/mackerel-agent-plugins

root@XXX-ubuntu-10:/tmp# apt-get install mackerel-agent-plugins
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  mackerel-agent-plugins
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 3 個。
6,450 kB のアーカイブを取得する必要があります。
この操作後に追加で 34.5 MB のディスク容量が消費されます。
取得:1 http://apt.mackerel.io/v2 mackerel/contrib amd64 mackerel-agent-plugins amd64 0.79.0-1.v2 [6,450 kB]
6,450 kB を 1秒 で取得しました (11.4 MB/s)
以前に未選択のパッケージ mackerel-agent-plugins を選択しています。
(データベースを読み込んでいます ... 現在 207683 個のファイルとディレクトリがインストールされています。)
.../mackerel-agent-plugins_0.79.0-1.v2_amd64.deb を展開する準備をしています ...
mackerel-agent-plugins (0.79.0-1.v2) を展開しています...
mackerel-agent-plugins (0.79.0-1.v2) を設定しています ...
root@XXX-ubuntu-10:/tmp#
install go-check-plugins (mackerel-check-plugins)

https://github.com/mackerelio/go-check-plugins

root@XXX-ubuntu-10:/tmp# apt-get install mackerel-check-plugins
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  mackerel-check-plugins
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 3 個。
3,488 kB のアーカイブを取得する必要があります。
この操作後に追加で 14.2 MB のディスク容量が消費されます。
取得:1 http://apt.mackerel.io/v2 mackerel/contrib amd64 mackerel-check-plugins amd64 0.45.0-1.v2 [3,488 kB]
3,488 kB を 0秒 で取得しました (8,108 kB/s)
以前に未選択のパッケージ mackerel-check-plugins を選択しています。
(データベースを読み込んでいます ... 現在 207739 個のファイルとディレクトリがインストールされています。)
.../mackerel-check-plugins_0.45.0-1.v2_amd64.deb を展開する準備をしています ...
mackerel-check-plugins (0.45.0-1.v2) を展開しています...
mackerel-check-plugins (0.45.0-1.v2) を設定しています ...
root@XXX-ubuntu-10:/tmp#

サービスメトリックを定期的に投稿する機構の積み込み1 (sardineインストール含む)

スクリプトで使うコマンド(bc, jq)等のインストール

結局、追加インストールしたのは jq だけだったみたい

root@XXX-ubuntu-10:/tmp# apt-get install bash-completion
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
bash-completion はすでに最新バージョン (1:2.11-5ubuntu1) です。
bash-completion は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 3 個。
root@XXX-ubuntu-10:/tmp# apt-get install bc
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
bc はすでに最新バージョン (1.07.1-3build1) です。
bc は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 3 個。
root@XXX-ubuntu-10:/tmp# apt-get install jq
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libjq1 libonig5
以下のパッケージが新たにインストールされます:
  jq libjq1 libonig5
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 3 個。
357 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,087 kB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 libonig5 amd64 6.9.7.1-2build1 [172 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 libjq1 amd64 1.6-2.1ubuntu3 [133 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 jq amd64 1.6-2.1ubuntu3 [52.5 kB]
357 kB を 2秒 で取得しました (171 kB/s)
以前に未選択のパッケージ libonig5:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 207771 個のファイルとディレクトリがインストールされています。)
.../libonig5_6.9.7.1-2build1_amd64.deb を展開する準備をしています ...
libonig5:amd64 (6.9.7.1-2build1) を展開しています...
以前に未選択のパッケージ libjq1:amd64 を選択しています。
.../libjq1_1.6-2.1ubuntu3_amd64.deb を展開する準備をしています ...
libjq1:amd64 (1.6-2.1ubuntu3) を展開しています...
以前に未選択のパッケージ jq を選択しています。
.../jq_1.6-2.1ubuntu3_amd64.deb を展開する準備をしています ...
jq (1.6-2.1ubuntu3) を展開しています...
libonig5:amd64 (6.9.7.1-2build1) を設定しています ...
libjq1:amd64 (1.6-2.1ubuntu3) を設定しています ...
jq (1.6-2.1ubuntu3) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
libc-bin (2.35-0ubuntu3.4) のトリガを処理しています ...
root@XXX-ubuntu-10:/tmp#
sardine の make install に必要なバイナリの追加(golang (1.18))
root@XXX-ubuntu-10:/tmp# apt  install -y golang-go
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  binutils binutils-common binutils-x86-64-linux-gnu g++ g++-11 gcc gcc-11 golang-1.18-go golang-1.18-src golang-src libasan6 libbinutils libc-dev-bin libc-devtools libc6-dev
  libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdpkg-perl libfile-fcntllock-perl libgcc-11-dev libitm1 liblsan0 libnsl-dev libquadmath0 libstdc++-11-dev libtirpc-dev libtsan0
  libubsan1 linux-libc-dev manpages-dev pkg-config rpcsvc-proto
提案パッケージ:
  binutils-doc g++-multilib g++-11-multilib gcc-11-doc gcc-multilib make autoconf automake libtool flex bison gcc-doc gcc-11-multilib gcc-11-locales bzr | brz git mercurial
  subversion glibc-doc debian-keyring bzr libstdc++-11-doc dpkg-dev
以下のパッケージが新たにインストールされます:
  binutils binutils-common binutils-x86-64-linux-gnu g++ g++-11 gcc gcc-11 golang-1.18-go golang-1.18-src golang-go golang-src libasan6 libbinutils libc-dev-bin libc-devtools
  libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdpkg-perl libfile-fcntllock-perl libgcc-11-dev libitm1 liblsan0 libnsl-dev libquadmath0 libstdc++-11-dev libtirpc-dev
  libtsan0 libubsan1 linux-libc-dev manpages-dev pkg-config rpcsvc-proto
アップグレード: 0 個、新規インストール: 35 個、削除: 0 個、保留: 3 個。
135 MB 中 135 MB のアーカイブを取得する必要があります。
この操作後に追加で 619 MB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 binutils-common amd64 2.38-4ubuntu2.3 [222 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libbinutils amd64 2.38-4ubuntu2.3 [662 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libctf-nobfd0 amd64 2.38-4ubuntu2.3 [107 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libctf0 amd64 2.38-4ubuntu2.3 [103 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 binutils-x86-64-linux-gnu amd64 2.38-4ubuntu2.3 [2,327 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 binutils amd64 2.38-4ubuntu2.3 [3,190 B]
取得:7 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libcc1-0 amd64 12.3.0-1ubuntu1~22.04 [48.3 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libitm1 amd64 12.3.0-1ubuntu1~22.04 [30.2 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libasan6 amd64 11.4.0-1ubuntu1~22.04 [2,282 kB]
取得:10 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 liblsan0 amd64 12.3.0-1ubuntu1~22.04 [1,069 kB]
取得:11 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libtsan0 amd64 11.4.0-1ubuntu1~22.04 [2,260 kB]
取得:12 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libubsan1 amd64 12.3.0-1ubuntu1~22.04 [976 kB]
取得:13 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libquadmath0 amd64 12.3.0-1ubuntu1~22.04 [154 kB]
取得:14 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgcc-11-dev amd64 11.4.0-1ubuntu1~22.04 [2,517 kB]
取得:15 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 gcc-11 amd64 11.4.0-1ubuntu1~22.04 [20.1 MB]
取得:16 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 gcc amd64 4:11.2.0-1ubuntu1 [5,112 B]
取得:17 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libc-dev-bin amd64 2.35-0ubuntu3.4 [20.3 kB]
取得:18 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 linux-libc-dev amd64 5.15.0-88.98 [1,346 kB]
取得:19 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 libcrypt-dev amd64 1:4.4.27-1 [112 kB]
取得:20 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 rpcsvc-proto amd64 1.4.2-0ubuntu6 [68.5 kB]
取得:21 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libtirpc-dev amd64 1.3.2-2ubuntu0.1 [192 kB]
取得:22 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 libnsl-dev amd64 1.3.0-2build2 [71.3 kB]
取得:23 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libc6-dev amd64 2.35-0ubuntu3.4 [2,100 kB]
取得:24 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libstdc++-11-dev amd64 11.4.0-1ubuntu1~22.04 [2,101 kB]
取得:25 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 g++-11 amd64 11.4.0-1ubuntu1~22.04 [11.4 MB]
取得:26 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 g++ amd64 4:11.2.0-1ubuntu1 [1,412 B]
取得:27 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 golang-1.18-src all 1.18.1-1ubuntu1.1 [16.2 MB]
取得:28 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 golang-1.18-go amd64 1.18.1-1ubuntu1.1 [66.0 MB]
取得:29 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 golang-src all 2:1.18~0ubuntu2 [4,438 B]
取得:30 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 golang-go amd64 2:1.18~0ubuntu2 [41.8 kB]
取得:31 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libc-devtools amd64 2.35-0ubuntu3.4 [28.9 kB]
取得:32 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 libfile-fcntllock-perl amd64 0.22-3build7 [33.9 kB]
取得:33 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 manpages-dev all 5.10-1ubuntu1 [2,309 kB]
取得:34 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 pkg-config amd64 0.29.2-1ubuntu3 [48.2 kB]
135 MB を 20秒 で取得しました (6,789 kB/s)
パッケージからテンプレートを展開しています: 100%
以前に未選択のパッケージ binutils-common:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 207788 個のファイルとディレクトリがインストールされています。)
.../00-binutils-common_2.38-4ubuntu2.3_amd64.deb を展開する準備をしています ...
binutils-common:amd64 (2.38-4ubuntu2.3) を展開しています...
以前に未選択のパッケージ libbinutils:amd64 を選択しています。
.../01-libbinutils_2.38-4ubuntu2.3_amd64.deb を展開する準備をしています ...
libbinutils:amd64 (2.38-4ubuntu2.3) を展開しています...
以前に未選択のパッケージ libctf-nobfd0:amd64 を選択しています。
.../02-libctf-nobfd0_2.38-4ubuntu2.3_amd64.deb を展開する準備をしています ...
libctf-nobfd0:amd64 (2.38-4ubuntu2.3) を展開しています...
以前に未選択のパッケージ libctf0:amd64 を選択しています。
.../03-libctf0_2.38-4ubuntu2.3_amd64.deb を展開する準備をしています ...
libctf0:amd64 (2.38-4ubuntu2.3) を展開しています...
以前に未選択のパッケージ binutils-x86-64-linux-gnu を選択しています。
.../04-binutils-x86-64-linux-gnu_2.38-4ubuntu2.3_amd64.deb を展開する準備をしています ...
binutils-x86-64-linux-gnu (2.38-4ubuntu2.3) を展開しています...
以前に未選択のパッケージ binutils を選択しています。
.../05-binutils_2.38-4ubuntu2.3_amd64.deb を展開する準備をしています ...
binutils (2.38-4ubuntu2.3) を展開しています...
以前に未選択のパッケージ libcc1-0:amd64 を選択しています。
.../06-libcc1-0_12.3.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
libcc1-0:amd64 (12.3.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ libitm1:amd64 を選択しています。
.../07-libitm1_12.3.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
libitm1:amd64 (12.3.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ libasan6:amd64 を選択しています。
.../08-libasan6_11.4.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
libasan6:amd64 (11.4.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ liblsan0:amd64 を選択しています。
.../09-liblsan0_12.3.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
liblsan0:amd64 (12.3.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ libtsan0:amd64 を選択しています。
.../10-libtsan0_11.4.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
libtsan0:amd64 (11.4.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ libubsan1:amd64 を選択しています。
.../11-libubsan1_12.3.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
libubsan1:amd64 (12.3.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ libquadmath0:amd64 を選択しています。
.../12-libquadmath0_12.3.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
libquadmath0:amd64 (12.3.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ libgcc-11-dev:amd64 を選択しています。
.../13-libgcc-11-dev_11.4.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
libgcc-11-dev:amd64 (11.4.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ gcc-11 を選択しています。
.../14-gcc-11_11.4.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
gcc-11 (11.4.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ gcc を選択しています。
.../15-gcc_4%3a11.2.0-1ubuntu1_amd64.deb を展開する準備をしています ...
gcc (4:11.2.0-1ubuntu1) を展開しています...
以前に未選択のパッケージ libc-dev-bin を選択しています。
.../16-libc-dev-bin_2.35-0ubuntu3.4_amd64.deb を展開する準備をしています ...
libc-dev-bin (2.35-0ubuntu3.4) を展開しています...
以前に未選択のパッケージ linux-libc-dev:amd64 を選択しています。
.../17-linux-libc-dev_5.15.0-88.98_amd64.deb を展開する準備をしています ...
linux-libc-dev:amd64 (5.15.0-88.98) を展開しています...
以前に未選択のパッケージ libcrypt-dev:amd64 を選択しています。
.../18-libcrypt-dev_1%3a4.4.27-1_amd64.deb を展開する準備をしています ...
libcrypt-dev:amd64 (1:4.4.27-1) を展開しています...
以前に未選択のパッケージ rpcsvc-proto を選択しています。
.../19-rpcsvc-proto_1.4.2-0ubuntu6_amd64.deb を展開する準備をしています ...
rpcsvc-proto (1.4.2-0ubuntu6) を展開しています...
以前に未選択のパッケージ libtirpc-dev:amd64 を選択しています。
.../20-libtirpc-dev_1.3.2-2ubuntu0.1_amd64.deb を展開する準備をしています ...
libtirpc-dev:amd64 (1.3.2-2ubuntu0.1) を展開しています...
以前に未選択のパッケージ libnsl-dev:amd64 を選択しています。
.../21-libnsl-dev_1.3.0-2build2_amd64.deb を展開する準備をしています ...
libnsl-dev:amd64 (1.3.0-2build2) を展開しています...
以前に未選択のパッケージ libc6-dev:amd64 を選択しています。
.../22-libc6-dev_2.35-0ubuntu3.4_amd64.deb を展開する準備をしています ...
libc6-dev:amd64 (2.35-0ubuntu3.4) を展開しています...
以前に未選択のパッケージ libstdc++-11-dev:amd64 を選択しています。
.../23-libstdc++-11-dev_11.4.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
libstdc++-11-dev:amd64 (11.4.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ g++-11 を選択しています。
.../24-g++-11_11.4.0-1ubuntu1~22.04_amd64.deb を展開する準備をしています ...
g++-11 (11.4.0-1ubuntu1~22.04) を展開しています...
以前に未選択のパッケージ g++ を選択しています。
.../25-g++_4%3a11.2.0-1ubuntu1_amd64.deb を展開する準備をしています ...
g++ (4:11.2.0-1ubuntu1) を展開しています...
以前に未選択のパッケージ golang-1.18-src を選択しています。
.../26-golang-1.18-src_1.18.1-1ubuntu1.1_all.deb を展開する準備をしています ...
golang-1.18-src (1.18.1-1ubuntu1.1) を展開しています...
以前に未選択のパッケージ golang-1.18-go を選択しています。
.../27-golang-1.18-go_1.18.1-1ubuntu1.1_amd64.deb を展開する準備をしています ...
golang-1.18-go (1.18.1-1ubuntu1.1) を展開しています...
以前に未選択のパッケージ golang-src を選択しています。
.../28-golang-src_2%3a1.18~0ubuntu2_all.deb を展開する準備をしています ...
golang-src (2:1.18~0ubuntu2) を展開しています...
以前に未選択のパッケージ golang-go:amd64 を選択しています。
.../29-golang-go_2%3a1.18~0ubuntu2_amd64.deb を展開する準備をしています ...
golang-go:amd64 (2:1.18~0ubuntu2) を展開しています...
以前に未選択のパッケージ libc-devtools を選択しています。
.../30-libc-devtools_2.35-0ubuntu3.4_amd64.deb を展開する準備をしています ...
libc-devtools (2.35-0ubuntu3.4) を展開しています...
以前に未選択のパッケージ libdpkg-perl を選択しています。
.../31-libdpkg-perl_1.21.1ubuntu2.2_all.deb を展開する準備をしています ...
libdpkg-perl (1.21.1ubuntu2.2) を展開しています...
以前に未選択のパッケージ libfile-fcntllock-perl を選択しています。
.../32-libfile-fcntllock-perl_0.22-3build7_amd64.deb を展開する準備をしています ...
libfile-fcntllock-perl (0.22-3build7) を展開しています...
以前に未選択のパッケージ manpages-dev を選択しています。
.../33-manpages-dev_5.10-1ubuntu1_all.deb を展開する準備をしています ...
manpages-dev (5.10-1ubuntu1) を展開しています...
以前に未選択のパッケージ pkg-config を選択しています。
.../34-pkg-config_0.29.2-1ubuntu3_amd64.deb を展開する準備をしています ...
pkg-config (0.29.2-1ubuntu3) を展開しています...
manpages-dev (5.10-1ubuntu1) を設定しています ...
libfile-fcntllock-perl (0.22-3build7) を設定しています ...
binutils-common:amd64 (2.38-4ubuntu2.3) を設定しています ...
linux-libc-dev:amd64 (5.15.0-88.98) を設定しています ...
libctf-nobfd0:amd64 (2.38-4ubuntu2.3) を設定しています ...
libasan6:amd64 (11.4.0-1ubuntu1~22.04) を設定しています ...
libtirpc-dev:amd64 (1.3.2-2ubuntu0.1) を設定しています ...
rpcsvc-proto (1.4.2-0ubuntu6) を設定しています ...
libquadmath0:amd64 (12.3.0-1ubuntu1~22.04) を設定しています ...
golang-1.18-src (1.18.1-1ubuntu1.1) を設定しています ...
libdpkg-perl (1.21.1ubuntu2.2) を設定しています ...
libubsan1:amd64 (12.3.0-1ubuntu1~22.04) を設定しています ...
libnsl-dev:amd64 (1.3.0-2build2) を設定しています ...
libcrypt-dev:amd64 (1:4.4.27-1) を設定しています ...
libbinutils:amd64 (2.38-4ubuntu2.3) を設定しています ...
libc-dev-bin (2.35-0ubuntu3.4) を設定しています ...
golang-src (2:1.18~0ubuntu2) を設定しています ...
libcc1-0:amd64 (12.3.0-1ubuntu1~22.04) を設定しています ...
liblsan0:amd64 (12.3.0-1ubuntu1~22.04) を設定しています ...
libitm1:amd64 (12.3.0-1ubuntu1~22.04) を設定しています ...
libc-devtools (2.35-0ubuntu3.4) を設定しています ...
libtsan0:amd64 (11.4.0-1ubuntu1~22.04) を設定しています ...
libctf0:amd64 (2.38-4ubuntu2.3) を設定しています ...
golang-1.18-go (1.18.1-1ubuntu1.1) を設定しています ...
pkg-config (0.29.2-1ubuntu3) を設定しています ...
libgcc-11-dev:amd64 (11.4.0-1ubuntu1~22.04) を設定しています ...
libc6-dev:amd64 (2.35-0ubuntu3.4) を設定しています ...
binutils-x86-64-linux-gnu (2.38-4ubuntu2.3) を設定しています ...
golang-go:amd64 (2:1.18~0ubuntu2) を設定しています ...
binutils (2.38-4ubuntu2.3) を設定しています ...
libstdc++-11-dev:amd64 (11.4.0-1ubuntu1~22.04) を設定しています ...
gcc-11 (11.4.0-1ubuntu1~22.04) を設定しています ...
g++-11 (11.4.0-1ubuntu1~22.04) を設定しています ...
gcc (4:11.2.0-1ubuntu1) を設定しています ...
g++ (4:11.2.0-1ubuntu1) を設定しています ...
update-alternatives: /usr/bin/c++ (c++) を提供するために自動モードで /usr/bin/g++ を使います
man-db (2.10.2-1) のトリガを処理しています ...
libc-bin (2.35-0ubuntu3.4) のトリガを処理しています ...
root@XXX-ubuntu-10:/tmp#

root@XXX-ubuntu-10:/tmp# go version
go version go1.18.1 linux/amd64
root@XXX-ubuntu-10:/tmp#
sardine の make install に必要なバイナリの追加(git)
root@XXX-ubuntu-10:/tmp# git --version
コマンド 'git' が見つかりません。次の方法でインストールできます:
apt install git
root@XXX-ubuntu-10:/tmp# apt install git
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  git-man liberror-perl
提案パッケージ:
  git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn
以下のパッケージが新たにインストールされます:
  git git-man liberror-perl
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 3 個。
4,147 kB のアーカイブを取得する必要があります。
この操作後に追加で 21.0 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 liberror-perl all 0.17029-1 [26.5 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 git-man all 1:2.34.1-1ubuntu1.10 [954 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 git amd64 1:2.34.1-1ubuntu1.10 [3,166 kB]
4,147 kB を 2秒 で取得しました (1,827 kB/s)
以前に未選択のパッケージ liberror-perl を選択しています。
(データベースを読み込んでいます ... 現在 226362 個のファイルとディレクトリがインストールされています。)
.../liberror-perl_0.17029-1_all.deb を展開する準備をしています ...
liberror-perl (0.17029-1) を展開しています...
以前に未選択のパッケージ git-man を選択しています。
.../git-man_1%3a2.34.1-1ubuntu1.10_all.deb を展開する準備をしています ...
git-man (1:2.34.1-1ubuntu1.10) を展開しています...
以前に未選択のパッケージ git を選択しています。
.../git_1%3a2.34.1-1ubuntu1.10_amd64.deb を展開する準備をしています ...
git (1:2.34.1-1ubuntu1.10) を展開しています...
liberror-perl (0.17029-1) を設定しています ...
git-man (1:2.34.1-1ubuntu1.10) を設定しています ...
git (1:2.34.1-1ubuntu1.10) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
root@XXX-ubuntu-10:/tmp# git --version
git version 2.34.1
root@XXX-ubuntu-10:/tmp#
sardine を make install (過程で make をインストール)して /usr/local/bin/ に配置
root@XXX-ubuntu-10:/tmp# cd /opt/
root@XXX-ubuntu-10:/opt# mkdir -p src/github.com
root@XXX-ubuntu-10:/opt# cd src/github.com/
root@XXX-ubuntu-10:/opt/src/github.com# git clone https://github.com/fujiwara/sardine.git
Cloning into 'sardine'...
remote: Enumerating objects: 283, done.
remote: Counting objects: 100% (117/117), done.
remote: Compressing objects: 100% (70/70), done.
remote: Total 283 (delta 56), reused 85 (delta 35), pack-reused 166
Receiving objects: 100% (283/283), 72.45 KiB | 7.24 MiB/s, done.
Resolving deltas: 100% (142/142), done.
root@XXX-ubuntu-10:/opt/src/github.com# cd sardine/
root@XXX-ubuntu-10:/opt/src/github.com/sardine# pwd
/opt/src/github.com/sardine
root@XXX-ubuntu-10:/opt/src/github.com/sardine# make install
コマンド 'make' が見つかりません。次の方法でインストールできます:
apt install make        # version 4.3-4.1build1, or
apt install make-guile  # version 4.3-4.1build1
root@XXX-ubuntu-10:/opt/src/github.com/sardine# apt install make
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
提案パッケージ:
  make-doc
以下のパッケージが新たにインストールされます:
  make
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 3 個。
180 kB のアーカイブを取得する必要があります。
この操作後に追加で 426 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 make amd64 4.3-4.1build1 [180 kB]
180 kB を 2秒 で取得しました (106 kB/s)
以前に未選択のパッケージ make を選択しています。
(データベースを読み込んでいます ... 現在 227347 個のファイルとディレクトリがインストールされています。)
.../make_4.3-4.1build1_amd64.deb を展開する準備をしています ...
make (4.3-4.1build1) を展開しています...
make (4.3-4.1build1) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
root@XXX-ubuntu-10:/opt/src/github.com/sardine# 
root@XXX-ubuntu-10:/opt/src/github.com/sardine# make install
go install ./cmd/sardine
go: downloading golang.org/x/sys v0.3.0
go: downloading github.com/Songmu/timeout v0.4.0
go: downloading github.com/aws/aws-sdk-go-v2 v1.17.3
go: downloading github.com/aws/aws-sdk-go-v2/config v1.18.5
go: downloading github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.23.1
go: downloading github.com/aws/aws-sdk-go-v2/service/s3 v1.29.6
go: downloading github.com/kayac/go-config v0.6.0
go: downloading github.com/mackerelio/mackerel-client-go v0.23.0
go: downloading github.com/mattn/go-shellwords v1.0.12
go: downloading github.com/Songmu/wrapcommander v0.1.0
go: downloading github.com/aws/smithy-go v1.13.5
go: downloading github.com/aws/aws-sdk-go-v2/credentials v1.13.5
go: downloading github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21
go: downloading github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28
go: downloading github.com/aws/aws-sdk-go-v2/service/sso v1.11.27
go: downloading github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.10
go: downloading github.com/aws/aws-sdk-go-v2/service/sts v1.17.7
go: downloading github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27
go: downloading github.com/jmespath/go-jmespath v0.4.0
go: downloading github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10
go: downloading github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.18
go: downloading github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11
go: downloading github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.22
go: downloading github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21
go: downloading github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.21
go: downloading github.com/BurntSushi/toml v1.2.1
go: downloading github.com/pkg/errors v0.9.1
go: downloading gopkg.in/yaml.v2 v2.4.0
go: downloading github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21
root@XXX-ubuntu-10:/opt/src/github.com/sardine#

sardine を /usr/local/bin/ に配置

root@XXX-ubuntu-10:/opt/src/github.com/sardine# ls -la $HOME/go/bin
合計 12392
drwxr-xr-x 2 root root     4096 1115 03:25 .
drwxr-xr-x 4 root root     4096 1115 03:25 ..
-rwxr-xr-x 1 root root 12680895 1115 03:25 sardine

root@XXX-ubuntu-10:/opt/src/github.com/sardine# cp -p $HOME/go/bin/sardine /usr/local/bin/
root@XXX-ubuntu-10:/opt/src/github.com/sardine# which sardine
/usr/local/bin/sardine

サービスメトリックを定期的に投稿する機構の積み込み2 (speedtestコマンドなどの残)

speedtest-cli のインストール

https://www.speedtest.net/ja/apps/cli

先に curl を入れた

root@XXX-ubuntu-10:/opt/src/github.com/sardine# sudo apt-get install curl
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  curl
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 11 個。
194 kB のアーカイブを取得する必要があります。
この操作後に追加で 454 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 curl amd64 7.81.0-1ubuntu1.14 [194 kB]
194 kB を 1秒 で取得しました (150 kB/s)
以前に未選択のパッケージ curl を選択しています。
(データベースを読み込んでいます ... 現在 227365 個のファイルとディレクトリがインストールされています。)
.../curl_7.81.0-1ubuntu1.14_amd64.deb を展開する準備をしています ...
curl (7.81.0-1ubuntu1.14) を展開しています...
curl (7.81.0-1ubuntu1.14) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
root@XXX-ubuntu-10:/opt/src/github.com/sardine# curl --version
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.16
Release-Date: 2022-01-05
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets zstd
root@XXX-ubuntu-10:/opt/src/github.com/sardine#
root@XXX-ubuntu-10:/opt/src/github.com/sardine# cd /tmp
root@XXX-ubuntu-10:/tmp# curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
Detected operating system as Ubuntu/jammy.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Detected apt version as 2.4.10
Running apt-get update... done.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/ookla_speedtest-cli.list...done.
Importing packagecloud gpg key... Packagecloud gpg key imported to /etc/apt/keyrings/ookla_speedtest-cli-archive-keyring.gpg
done.
Running apt-get update... done.

The repository is setup! You can now install packages.
root@XXX-ubuntu-10:/tmp# sudo apt-get install speedtest
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  speedtest
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 11 個。
1,106 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,628 kB のディスク容量が消費されます。
取得:1 https://packagecloud.io/ookla/speedtest-cli/ubuntu jammy/main amd64 speedtest amd64 1.2.0.84-1.ea6b6773cf [1,106 kB]
1,106 kB を 1秒 で取得しました (1,569 kB/s)
以前に未選択のパッケージ speedtest を選択しています。
(データベースを読み込んでいます ... 現在 227376 個のファイルとディレクトリがインストールされています。)
.../speedtest_1.2.0.84-1.ea6b6773cf_amd64.deb を展開する準備をしています ...
speedtest (1.2.0.84-1.ea6b6773cf) を展開しています...
speedtest (1.2.0.84-1.ea6b6773cf) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
root@XXX-ubuntu-10:/tmp# speedtest --version
Speedtest by Ookla 1.2.0.84 (ea6b6773cf) Linux/x86_64-linux-musl 6.2.0-36-generic x86_64

The official command line client for testing the speed and performance
of your internet connection.
root@XXX-ubuntu-10:/tmp#
speedtest-cli accept license と初回実行
root@XXX-ubuntu-10:/tmp# which speedtest
/usr/bin/speedtest
root@XXX-ubuntu-10:/tmp# speedtest
==============================================================================

You may only use this Speedtest software and information generated
from it for personal, non-commercial use, through a command line
interface on a personal computer. Your use of this software is subject
to the End User License Agreement, Terms of Use and Privacy Policy at
these URLs:

        https://www.speedtest.net/about/eula
        https://www.speedtest.net/about/terms
        https://www.speedtest.net/about/privacy

==============================================================================

Do you accept the license? [type YES to accept]: YES
License acceptance recorded. Continuing.


   Speedtest by Ookla

      Server: i3D.net - Tokyo (id: 21569)
         ISP: au one net
Idle Latency:     5.15 ms   (jitter: 0.26ms, low: 4.97ms, high: 5.46ms)
    Download:   395.69 Mbps (data used: 188.3 MB)
                 11.06 ms   (jitter: 0.87ms, low: 5.64ms, high: 13.89ms)
      Upload:   112.96 Mbps (data used: 50.9 MB)
                154.76 ms   (jitter: 46.35ms, low: 6.49ms, high: 360.84ms)
 Packet Loss:     0.0%
  Result URL: https://www.speedtest.net/result/c/03b6751f-481b-4f90-9d69-c5c6a28a90c6
root@XXX-ubuntu-10:/tmp#

sardine-agent.service の登録・起動、mackerel-agent の再始動

sardine-agent.service の設定

${MACKEREL_API_KEY} は・・・投入してください

sardine-agent.service
[Unit]
Description=sardine-agent

[Service]
Type=simple
WorkingDirectory=/opt/sardine
ExecStart=sudo MACKEREL_APIKEY="${MACKEREL_API_KEY}" /root/go/bin/sardine -config /opt/sardine/speedtest-service.conf
TimeoutStopSec=5
StandardOutput=append:/opt/sardine/sardine-agent.stdout
StandardError=append:/opt/sardine/sardine-agent.stderr
User=root
Group=root

[Install]
WantedBy = multi-user.target

↑を /etc/systemd/system/ に置くこと+下記コマンド実行でサービス登録(refs 逆引き:Ubuntu環境で自分で作ったサービスをシステムに登録する

root@XXX-ubuntu-10:# systemctl enable sardine-agent.service
Created symlink /etc/systemd/system/multi-user.target.wants/sardine-agent.service → /etc/systemd/system/sardine-agent.service.
root@XXX-ubuntu-10:# systemctl status sardine-agent
○ sardine-agent.service - sardine-agent
     Loaded: loaded (/etc/systemd/system/sardine-agent.service; enabled; vendor preset: enabled)
     Active: inactive (dead)
root@XXX-ubuntu-10:# systemctl is-enabled sardine-agent
enabled
root@XXX-ubuntu-10:#

登録後、サービス起動

root@XXX-ubuntu-10:# systemctl start sardine-agent
root@XXX-ubuntu-10:# systemctl status sardine-agent
● sardine-agent.service - sardine-agent
     Loaded: loaded (/etc/systemd/system/sardine-agent.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-11-18 12:40:40 JST; 7s ago
   Main PID: 38124 (sudo)
      Tasks: 23 (limit: 18828)
     Memory: 10.9M
        CPU: 537ms
     CGroup: /system.slice/sardine-agent.service
             ├─38124 sudo MACKEREL_APIKEY=${MACKEREL_API_KEY} /root/go/bin/sardine -config /opt/sardine/speedtest-service.conf
             ├─38125 /root/go/bin/sardine -config /opt/sardine/speedtest-service.conf
             ├─38133 /bin/bash /opt/scripts/speedtest-service.sh
             └─38137 speedtest -f json

1118 12:40:40 XXX-ubuntu-10 systemd[1]: Started sardine-agent.
1118 12:40:40 XXX-ubuntu-10 sudo[38124]:     root : PWD=/opt/sardine ; USER=root ; ENV=MACKEREL_APIKEY=${MACKEREL_API_KEY} ; COMMAND=/root/go/bin/sardin>
1118 12:40:40 XXX-ubuntu-10 sudo[38124]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=0)
root@XXX-ubuntu-10:#
関連する設定
/opt/sardine/speedtest-service.conf
[plugin.metrics.bandwidth]
command     = "/opt/scripts/speedtest-service.sh"
destination = "Mackerel"
service     = "home"
interval    = "15m"
timeout     = "200s"
/opt/scripts/speedtest-service.sh
#!/bin/bash

SECONDS=`date '+%s'`

cd .

COMMAND="speedtest -f json"
JSONFILE="./speedtest-service.json"
LOGFILE="./speedtest-service.log"
JUDGE_KEY=".type"
OK_VALUE="\"result\""

# json に result がなかったら45秒待ってリトライ。3回目も失敗したら exit -1
# download が 10 Mbps 以下のときもリトライする。(1)
# 結果取得できてない (2), 結果ファイルが生成されてない (3) 場合もリトライ。
NUM_OF_ATTEMPTS=0
COMMAND_STATUS=1
until [ $COMMAND_STATUS -eq 0 -o $NUM_OF_ATTEMPTS -eq 4 ]; do
  DATETIME=`date "+%Y/%m/%d %H:%M:%S"`
  echo "[$DATETIME] #$NUM_OF_ATTEMPTS" >> $LOGFILE
  BW="?"
  $COMMAND > $JSONFILE
  if [[ -e $JSONFILE ]]; then
    COMMAND_RESULT=`cat $JSONFILE | jq $JUDGE_KEY`
    if [[ $COMMAND_RESULT = $OK_VALUE ]]; then
      let BW=`cat $JSONFILE | jq ".download.bandwidth"`
      VAL=`echo "scale=2; ${BW} * 8 / 1000 / 1000" | bc`
      if [ `echo "$VAL > 10.0" | bc` = 1  ]; then
        COMMAND_STATUS=0
      else
        COMMAND_STATUS=1
      fi
    else
      COMMAND_STATUS=2
    fi
  else
    COMMAND_STATUS=3
  fi
  let NUM_OF_ATTEMPTS=NUM_OF_ATTEMPTS+1
  DATETIME=`date "+%Y/%m/%d %H:%M:%S"`
  echo "[$DATETIME] #$NUM_OF_ATTEMPTS -> $COMMAND_STATUS ($COMMAND_RESULT) Bandwidth=$BW" >> $LOGFILE
  if [ $COMMAND_STATUS -ne 0 ]; then
    sleep 45
  fi
done

if [ $NUM_OF_ATTEMPTS -ge 4 -o $COMMAND_STATUS -ne 0 ]; then
  DATETIME=`date "+%Y/%m/%d %H:%M:%S"`
  echo "[$DATETIME] #-1 -> $COMMAND_STATUS" >> $LOGFILE
  exit -1
fi


NAME1='bandwidth.download'
BW1=`cat $JSONFILE | jq ".download.bandwidth"`
VALUE1=`echo "scale=2; ${BW1} * 8 / 1000 / 1000" | bc`
echo -e "${NAME1}\t${VALUE1}\t${SECONDS}"

NAME2='bandwidth.upload'
BW2=`cat $JSONFILE | jq ".upload.bandwidth"`
VALUE2=`echo "scale=2; ${BW2} * 8 / 1000 / 1000" | bc`
echo -e "${NAME2}\t${VALUE2}\t${SECONDS}"

#rm -f $JSONFILE
mv $JSONFILE "${JSONFILE}.last"

exit 0

これで機構再始動、と思いきや、 mackerel-agent.conf を変える必要があったので差分を披露

RasPi から Ubuntu 22.04 に移行した mackerel-agent.conf の diff (抜粋)

root@XXX-ubuntu-10:/etc/mackerel-agent# diff -u mackerel-agent.conf.20231118-1309 mackerel-agent.conf
--- mackerel-agent.conf.20231118-1309   2023-11-18 13:09:15.806872171 +0900
+++ mackerel-agent.conf 2023-11-18 13:17:31.551292066 +0900
@@ -1,22 +1,21 @@
+
 # mackerel-agent.conf

 [plugin.metrics.linux]
-command = ["mackerel-agent-plugins", "linux"]
+command = ["mackerel-plugin-linux"]

 [plugin.metrics.multicore]
-command = ["mackerel-agent-plugins", "multicore"]
+command = ["mackerel-plugin-multicore"]

 [plugin.metrics.conntrack]
-command = ["mackerel-agent-plugins", "conntrack"]
+command = ["mackerel-plugin-conntrack"]

 [plugin.metrics.inode]
-command = ["mackerel-agent-plugins", "inode"]
+command = ["mackerel-plugin-inode"]

 [plugin.checks.disk]
 command = ["mackerel-check", "disk", "-w", "25%", "-c", "15%", "-p", "/"]
-#command = ["go-check-plugins", "disk", "-w", "25%", "-c", "15%", "-p", "/"]
-#command = ["check-disk", "--path", "/", "--warning", "25%", "--critical", "15%"]

 [plugin.metrics.temperature_cpu]
 command = "/opt/scripts/cpu_temperature.sh"
@@ -26,20 +25,16 @@

 [plugin.checks.check_sardine]
 command = ["mackerel-check", "procs", "--pattern", "sardine", "-C", "1"]
-#command = ["go-check-plugins", "procs", "--pattern", "sardine", "-C", "1"]

 [plugin.checks.check_log_speedtest_retry_1]
 command = ["mackerel-check", "log", "--file", "/opt/sardine/speedtest-service.log", "--pattern", "#2 ", "-w", "2", "-c", "4", "--return"]
-#command = ["go-check-plugins", "log", "--file", "/opt/sardine/speedtest-service.log", "--pattern", "#2 ", "-w", "2", "-c", "4", "--return"]
 check_interval = 12

 [plugin.checks.check_log_speedtest_retry_2]
 command = ["mackerel-check", "log", "--file", "/opt/sardine/speedtest-service.log", "--pattern", "#3 ", "-w", "1", "-c", "2", "--return"]
-#command = ["go-check-plugins", "log", "--file", "/opt/sardine/speedtest-service.log", "--pattern", "#3 ", "-w", "1", "-c", "2", "--return"]
 check_interval = 10

 [plugin.checks.check_log_speedtest_retry_3]
 command = ["mackerel-check", "log", "--file", "/opt/sardine/speedtest-service.log", "--pattern", "#\\-1 ", "-c", "0", "--return"]
-#command = ["go-check-plugins", "log", "--file", "/opt/sardine/speedtest-service.log", "--pattern", "#\\-1 ", "-c", "0", "--return"]
 check_interval = 2

root@XXX-ubuntu-10:/etc/mackerel-agent#

今のところ静かに役目を果たしてます。ログ監視が機能してない疑惑がありますが(全然発報しない)・・・

最後まで見ていただきありがとうございました。

明日24日目の予定は以下になっています。お楽しみに。
CREとしてちょっと痒いところを解消するツールを作ったお話 by @tukaelu さん

Note

ちょっとしたひとり言です。issue 上げた方が良いのかもしれない?

https://github.com/mackerelio/go-check-plugins
x mackerel-check-plugins will be installed to /usr/local/bin/check-*.
o mackerel-check-plugins will be installed to /usr/bin/check-*.

OSによって違うのか?

脚注
  1. 22日目は @mashiike さんの 実践的なPrepalertの設定 でした。 ↩︎

  2. RaspberryPiからSpeedtestCLIの結果をMackerelサービスメトリックに投稿する (2)#サービスメトリック投稿手段として sardine を採用 ↩︎

Discussion