@ryosmsです
この記事はMackerel Advent Calendarの8日目です。

つい最近、JavaなプロジェクトからMackerelにサービスメトリックを投稿した時に、Spring FrameworkのRestTemplateを使ったらめっちょ簡単だったので紹介します。

今回はサービスメトリックの投稿をやっていきますが、MackerelのAPIドキュメントを眺めてると大体のことはできそうですね。
(オーガニゼーションごとに発行するAPIキーで認証を行うので「アカウントが参加しているオーガニゼーションの一覧」みたいのは取れなさそうですが、そこはAPI v1に期待しましょう)



サンプルは以下の仕様で作っています。

・トップページ
・オーガニゼーション名を表示
・サービスの一覧を表示、サービスページにリンク
・サービスページ
・サービスメトリックの一覧を表示
・任意の名前でサービスメトリックの投稿

サンプルコードの全編はGitHubに置いてあります。
ryosms/spring-rest-template-mackerel

実際に動かしながら確認する場合は、src/main/resources/application.yml.orgをコピーしてMackerelのAPI Keyに自身のものをセットしてください。

解説
簡単過ぎるので「ソース嫁」でいい気もしますが... ポイントを解説しておきます。

build.gradle
RestTemplateを使うため(とWebアプリにするため)、"spring-boot-starter-web"を依存に入れています。
dependencies {
    ...
    compile 'org.springframework.boot:spring-boot-starter-web'
    ...
}

com.ryosms.mackerel.modelパッケージ
Mackerel APIのリクエスト/レスポンスのjsonをマッピングするモデルクラスを作成します。型々してて実にJavaらしいです。

com.ryosms.mackerel.service.MackerelServiec#loadOrganizationName
RestOperations#getForObjectだとHeaderが渡せないのでRestOperations#exchangeを使っています。

com.ryosms.mackerel.model.ServiceMetric
Mackerelのサービスメトリックに渡すtimeはエポック秒ですが、java.util.Date#getTimeの返却値はミリ秒なので調整を入れています。(ここでハマると延々と 400 Bad Requestをもらうことになります)

・CSSフレームワーク
見た目が寂しいのもアレなので、CSSフレームワークとしてjagridを使用しています。ちょっとクセはあるけど便利でした。本番のアプリケーションに組み込むことはないと思います。


確認
作ったプログラムでちゃんと動くかどうか確認します。

1. APIからはサービスを作れないので、ダッシュボードでサービスを作っておきます
01_organization
「advent-calendar」というオーガニゼーション名で「test-service」と「zangyo」というサービスを作りました。
02_no_service_metric
作ったばかりなので「zangyo」にはサービスメトリックが存在しません。
(APIドキュメントにはエンドポイントのルートURLが載っていませんが、ここで確認できます)


2. アプリを動かしてトップページ(localhost:8080)にアクセスします
03_service_list

オーガニゼーション名とサービスの一覧が取れていますね。

3. サービスのリンクを踏んでみます
04_post_metric
「zangyo」にはまだメトリックが存在しません。
ここで、適当なメトリック名と値を入れて投稿してみます。

4. 投稿完了したらメトリック一覧が更新されます
05_post_result
メトリックの一覧に出てきています。

06_post_result_mackerel
Mackerelのダッシュボードでも確認できました。
APIからメトリックの単位も設定して投げられると嬉しいのですが、、複数のメトリックが1つのグラフにまとめられる際の仕様を考えるとメトリックごとに単位を設定してしまうといろいろめんどくさそうな気がしますね?

それにしてもサービス「残業」が200時間とかブラックですね。
なお、ここで投稿したメトリックの内容は実在の人物や団体とは関係ありません。

現場からは以上です。
それではよい方眼紙Mackerelライフを!

なお、このエントリは大都会岡山での業務の知見が多少入っているため大都会岡山Advent Calendarの8日目でもありました。

それはそうと、GitHubのTopicsって日本語対応してないんですね
25