Prometheus の JSON を jq で処理する
Prometheus の JSON を jq で処理する
気付き
この作業で得られた気付きを先に書いておく
- 更新代入
|=
についての誤解- jq コマンドのパイプ文字
|
はunixシェルのパイプ文字とは若干イメージが異なる |=
は独立のオペレーターで、2つの演算子|
と=
を組み合わせたものではない- 下記の例でも
.data.result[].values[] | .[0] |= strflocaltime("%Y-%m-%dT%H:%M:%S%z")
- これだとvalues[]の2つの要素が出てくる。
.[0]
のフィルターではなく、|=
の結果が出力となる
- これだとvalues[]の2つの要素が出てくる。
.data.result[].values[] | .[0] | . = strflocaltime("%Y-%m-%dT%H:%M:%S%z")
- これだとvalues[]の最初の要素しか出てこない。
.[0]
のフィルターがかかる。
- これだとvalues[]の最初の要素しか出てこない。
- 下記の例でも
- jq コマンドのパイプ文字
- フィルターをまとめるにはカッコ
()
を使う - JSONで少し離れた場所の情報は変数に持つ
やりたいこと
(*): https://prometheus.io/docs/prometheus/latest/querying/functions/#increase
The increase is extrapolated to cover the full time range as specified in the range vector selector, so that it is possible to get a non-integer result even if a counter increases only by integer increments.
入力
HTTP API /api/v1/query_range の結果がこんなだったとして
{ "status" : "success", "data" : { "resultType" : "matrix", "result" : [ { "metric" : { "__name__" : "foo", "job" : "node", "instance" : "bar:9100" }, "values" : [ [ 1689329940, "1.000023" ], [ 1689329955, "4.000056" ], [ 1689329970, "7.000089" ] ] }, { "metric" : { "__name__" : "foo", "job" : "node", "instance" : "baz:9100" }, "values" : [ [ 1689329940, "1.000023" ], [ 1689329955, "4.000056" ], [ 1689329970, "7.000089" ] ] } ] } }
unix time変換
unix timeを変換。iso8601拡張形式にしようとしたが、微妙に間違っている(タイムゾーンにコロン :
がない)。
.data.result[].values[] | .[0] | strflocaltime("%Y-%m-%dT%H:%M:%S%z")
結果
2023-07-14T10:19:00+0000 2023-07-14T10:19:15+0000 2023-07-14T10:19:30+0000 2023-07-14T10:19:00+0000 2023-07-14T10:19:15+0000 2023-07-14T10:19:30+0000
無理やりコロンを挿入。jq の sub() の正規表現で、後方参照は名前付きキャプチャー((?<name>pattern)
)というものを使って、 "\(.name)"
のように参照するそうだ。
.data.result[].values[] | .[0] | strflocaltime("%Y-%m-%dT%H:%M:%S%z") | gsub("(?<a>[+-][0-9][0-9])(?<b>[0-9][0-9])"; "\(.a):\(.b)")
結果
2023-07-14T10:19:00+00:00 2023-07-14T10:19:15+00:00 2023-07-14T10:19:30+00:00 2023-07-14T10:19:00+00:00 2023-07-14T10:19:15+00:00 2023-07-14T10:19:30+00:00
少数を整数に丸め
ダブルクォーテーションが付いているので、数値型にしてから整数にする
.data.result[].values[] | .[1] | tonumber | round
結果
1 4 7 1 4 7
instance を出力する
これは変数に覚えておく
.data.result[] | .metric.instance as $instance | $instance
結果
bar:9100 baz:9100
処理をまとめる
- jqの場合、これが意外に面倒になる。今回は更新代入
|=
を繰り返せば良かったので、比較的、単純 - strflocaltimeとgsubをカッコでまとめてから代入する
- tonumberとroundもカッコでくくる
- 最後に配列にしてCSVにする
(雰囲気で、改行してインデントしてみたけど、何か整形ルールはあるのかな)
.data.result[] | .metric.instance as $instance | .values[] | .[0] |= (strflocaltime("%Y-%m-%dT%H:%M:%S%z") | gsub("(?<a>[+-][0-9][0-9])(?<b>[0-9][0-9])"; "\(.a):\(.b)")) | .[1] |= (tonumber | round) | [.[0], $instance, .[1]] | @csv
結果
"2023-07-14T10:19:00+00:00","bar:9100",1 "2023-07-14T10:19:15+00:00","bar:9100",4 "2023-07-14T10:19:30+00:00","bar:9100",7 "2023-07-14T10:19:00+00:00","baz:9100",1 "2023-07-14T10:19:15+00:00","baz:9100",4 "2023-07-14T10:19:30+00:00","baz:9100",7
お試しURL
これはいつまで有効なんだろう?
GWにKindle Unlimited
Kindle Unlimited が2か月98円のセールだったので、GWのタイミングで申し込んだ。
古い漫画が全巻無料で読めないかなと期待したけど、逆で、古い漫画よりは新作が1巻だけ無料みたいなのが多いみたい。
- Amazon.co.jp Kindleストア 5巻以上読み放題のマンガタイトル
https://www.amazon.co.jp/s?rh=n%3A10518911051&fs=true
そんな中でも合本版というのは割と長いものが読める。よくコンビニで売っているやつの電子版になるのかな。
第3巻までしか対象じゃなかった。これも全3巻のうち2巻までしか読めない。2巻までは面白かったので、それで満足しておく。表紙のリアル気味な感じではないので、作中では主人公はかわいいです。これは読み応えがあった。全国大会編を最後まで読めた。ラノベの方。第1巻だけだった。ビンボー生活の人のまだ読んでないものがあった。これは何と合本で全13巻、通常の40巻分あります。GWでは読み切れない。第2巻まで12巻まで。5巻まで読めた。
Bluetoothが使えなくなった Windows 10
memo
memo
- ナビタイムの「ツーリングサポーター」アプリ、原付用の二段階右折回避機能を搭載 | マイナビニュース
https://news.mynavi.jp/article/20230131-2580660/ - 【やじうまミニレビュー】死蔵しているFireタブレットをWindowsのサブモニターとして使える「spacedesk」 - PC Watch
https://pc.watch.impress.co.jp/docs/column/yajiuma-mini-review/1481098.html - 【毎日がアプリディ】ガルパン聖地巡礼コースも収録! ルート自動作成機能搭載ウォーキングアプリ「ALKOO by NAVITIME」 | マイナビニュース
https://news.mynavi.jp/article/20230310-2614437/
- mineo、ドコモ回線プランのeSIMサービスを2月22日に提供開始 | マイナビニュース
https://news.mynavi.jp/article/20230131-2580520/ - mineo、最大32kbpsながら月額250円の新料金プラン「マイそくスーパーライト」 | マイナビニュース
https://news.mynavi.jp/article/20230131-2580432/
PHSはこのぐらいで速いって喜んでたな。ISDNでも64Kだったっけ?
- 新NISAの論理的に正しい唯一の活用法 | トウシル 楽天証券の投資情報メディア
https://media.rakuten-sec.net/articles/-/40530 - 新NISAをめぐるQ&A10選 | トウシル 楽天証券の投資情報メディア
https://media.rakuten-sec.net/articles/-/40661
病気をされてから一層切れ味が増してる
- 【違反者の罰則、最高10万円】「所有者不明の土地」大量発生で不動産の相続登記義務化、あまりの面倒くささにゲンナリ | 幻冬舎ゴールドオンライン
https://gentosha-go.com/articles/-/50060
- 40代からの健康習慣。風呂前、腕立て10回を3ヶ月続けてみた。その結果、私に起こったこととは - 水野雅浩/健康マネジメント | Yahoo! JAPAN クリエイターズプログラム
https://creators.yahoo.co.jp/mizunomasahirokenkom/0100390647
- クランプ式アームによる傷や負荷を軽減する補強プレート、新色追加 | マイナビニュース
https://news.mynavi.jp/article/20230207-2585661/ - アラジン、トースター内で焼き上げる3,960円のホットサンドメーカー | マイナビニュース
https://news.mynavi.jp/article/20230207-2585505/ - レトルトカレー好きならひとつは持っておきたい「レトルトトング」 :: デイリーポータルZ
https://dailyportalz.jp/kiji/retort_tong - フライパンで目玉焼き、やめました。これがあればパンと一緒にトースターに入れるだけでいいんです | ROOMIE(ルーミー)
https://www.roomie.jp/2022/09/836759/ - 外出時に必携! いざというときに役立つ「防災ボトル」:日経ビジネス電子版
https://business.nikkei.com/atcl/gen/19/00463/022700012/ - 一次エネルギーの利用効率98%を実現した家庭用燃料電池、パナソニックの新型エネファーム | マイナビニュース
https://news.mynavi.jp/article/20230310-panasonic/ - 新生活に買いたいキッチン家電、編集部員が考えた【春の新生活特集2023】 | マイナビニュース
https://news.mynavi.jp/article/20230310-2613068/
- アキボウ、TernとDAHONに続く新ブランド「VICCI」のe-bike。16インチミニベロで16万円台 - 家電 Watch
https://kaden.watch.impress.co.jp/docs/news/1479490.html - 5段アシスト&9段ギアで究極の快適走行。ミニマル折りたたみ電動自転車EOLEX|マクアケ - アタラシイものや体験の応援購入サービス
https://www.makuake.com/project/eole_x/
Amazon Fire HD 8
Fire HD 8
2015年のFire HD 8を我慢して使っていたが、買い替えることに。iPad miniにしようかと少し考えたが、寝る前にネットを見るぐらいしか使っていないので、止めておいた。値段が全然違うので。
一回、仕様をメモしておこう。
Fire HD 8 Plus タブレット (2022年発売)
Fire HD 8 タブレット 16GB (2015, 第5世代)
- 解像度 1280 x 800
- 重量 311グラム
- サイズ 214 x 128 x 7.7mm
- RAM 1GB
- 容量 16GB
- バッテリー 最大8時間
Kindle Fire HD 16GB タブレット(2012 第2世代)
- 解像度 1280 x 800
- 重量 395グラム
- サイズ 193×137×10.3 mm
- RAM 1GB
- 容量 16GB
- バッテリー 4,400 mAh
正直、ここだけ見ると昔からそんなに変わってない。
URLメモ
- Fireタブレットの仕様: Fire HDモデル | Fireタブレット
https://developer.amazon.com/ja/docs/fire-tablets/ft-device-specifications-firehd-models.html?v=firehd7_2012 - Fireタブレット - Wikipedia
https://ja.wikipedia.org/wiki/Fire%E3%82%BF%E3%83%96%E3%83%AC%E3%83%83%E3%83%88 - Kindle Fire HD (第1世代) - Wikipedia
https://ja.wikipedia.org/wiki/Kindle_Fire_HD_(%E7%AC%AC1%E4%B8%96%E4%BB%A3)