前回の記事には書いていないことも含まれているあらすじ。
Goのディレクトリ構成の『い』の字すら無視したGit Cloneからのビルドの結果、Mackerelエージェントは全くビルドされる気配がなかった。
go get
コマンドを叩いた後も、インストールしていないGCCが求められ、環境面の面倒くささを目の当たりにしてテンションがすでに下がっている。
果たしてARMクロスビルドしてRaspberry Pi向けのカスタムMackerelエージェントを構成することはできるのだろうか?
- ローカルマシンでエージェントをビルド
- 呼び出すAPIベースを変更(バイナリ埋め込み)
の2本でお届けします。
ローカルマシンでエージェントをビルド
というわけで、Windows向けのGCCをインストール、パスを通してからビルド、実行した。
PS C:\Users\koudenpa\go\src\github.com\7474\mackerel-agent> .\build-sandbox.bat C:\Users\koudenpa\go\src\github.com\7474\mackerel-agent>echo on C:\Users\koudenpa\go\src\github.com\7474\mackerel-agent>go build -o build/mackerel-agent.exe PS C:\Users\koudenpa\go\src\github.com\7474\mackerel-agent> cd .\build\ PS C:\Users\koudenpa\go\src\github.com\7474\mackerel-agent\build> .\mackerel-agent.exe init -apikey xxx PS C:\Users\koudenpa\go\src\github.com\7474\mackerel-agent\build> .\mackerel-agent.exe2018/04/24 19:10:04 INFO <main> Starting mackerel-agent version:0.54.1, rev:, apibase:https://api.mackerelio.com 2018/04/24 19:10:11 INFO <command> Start: apibase = https://api.mackerelio.com, hostName = DESKTOP-xxx, hostID = xxx
メトリック届いている。
これでVol.1のノルマは達成だ。
呼び出すAPIベースを変更(バイナリ埋め込み)
コードを眺めていると、さしあたって呼び出し先を変更するだけならビルドオプションでAPIベースURIを指定すればよい様子だったので試した。
サンドボックスビルド用のビルドファイルを追加。 · 7474/mackerel-agent@36b2eaf · GitHub
呼び出し先のAPIスタブはなんとなくAzure Function AppをVisualStudioで雑にスキャフォルドしてローカルで実行した。
GitHub - 7474/MackerelDashFunctionApp: Mackerelエージェントの変更を試す際に使用しているアプリケーションです。
エージェントの実行ログ。
PS C:\Users\koudenpa\go\src\github.com\7474\mackerel-agent> .\build\mackerel-agent.exe # 変更したAPIベースになっている 2018/04/24 21:15:53 INFO <main> Starting mackerel-agent version:0.54.1, rev:, apibase:http://localhost:7071 2018/04/24 21:16:00 INFO <command> Start: apibase = http://localhost:7071, hostName = , hostID = xxx # APIスタブで 201 を返したら期待と違うと失敗 2018/04/24 21:17:01 WARNING <command> Failed to post metrics value (will retry): API error. status: 201, msg: api request failed # リトライでキー重複エラーしてAPIスタブも失敗 2018/04/24 21:18:01 WARNING <command> Failed to post metrics value (will retry): API error. status: 500, msg: api request failed
APIスタブに呼び出しログが出ている。
ローカルストレージにそれっぽいメトリックが保存されている。
単に投稿先を変えたいだけで、認証もAPIキーで行うようなら、これだけの修正で実現できてしまうようだ。
そりゃぁ、開発の便宜上呼び出し先のURIは平易に変更できるようになっているよなぁ。という感じである。
ビルドすらできなかった前回からしたら格段の進歩だが、Goのコードは全く触っていない。 次はこうもいくまい。
設定項目を増やす、認証やプロトコルの変更を睨んでAPI呼び出しを変更できるようにする(Go的には何ていうのか知らん)、など順次試していきたい。
余談。
フォーク数がちょうど 74 で縁起が良い。
追記。
そりゃぁ、開発の便宜上呼び出し先のURIは平易に変更できるようになっているよなぁ。という感じである。
ビルドオプションを変えるという行為が平易だと思ってるようならお前はアホだ。
もう少しコードを読んでいたら、普通に設定ファイル内容を読み込んでいた。 つまり、ビルドオプションでデフォルトのAPIベースをローカルホストにしているバイナリでも、以下の様な設定ファイルを食べさせることで元のMackerelにメトリックを投稿できる。
apikey = "xxx" apibase = "https://api.mackerelio.com"
こうやって、印象的な出来事が起きるたびに要素技術や実装が身に刻まれていくのだ。
消して道化ではないぞ! 心を強く持つんだ!!
さらについき。
> mackerel-agent.exe -h Usage: mackerel-agent [options] main process of mackerel-agent Options: -apibase string API base (default "http://localhost:7071") ...
まぁ、そういうこともあるさ。基本は大事。