New Relic FlexでHTMLテーブルのデータを取得してみた
はじめに
New Relic Advent Calendar 12日目の記事になります。
こんにちは、まめです。普段はMotionBoard Cloudの運用、開発業務に携わってます。New Relic勉強中です。
今回はNew Relic Advent Calendarの記事ということで、私の部署でも利用しているNew Relic Flexについて紹介していこうと思います。
New Relic Flex
New Relic Flex を使うことでコマンドの出力結果やWebページの情報などから簡単に独自のメトリクスをNew Relicに送信することができます。
https://github.com/newrelic/nri-flex
使い方
使い方は簡単でNew Relic Infrastructure agentがインストールされているホストに以下のかたちでYAML形式のファイルを置くだけで良いです。
/etc/newrelic-infra/integrations.d/xxxxx.yml
YAMLの形式
YAMLファイルの書式は以下にドキュメントがあります。
https://github.com/newrelic/nri-flex/blob/master/docs/basics/configure.md#configuration-schema
+----------------------+
| name |
| global? |
| +--------------+ |
| | <properties> | | Suffixes:
| +--------------| | ? optional
| custom_attributes? | * multiple repetitions
| +----------------+ |
| | <key>: <value> | * |
| +----------------+ |
| apis |
| +---------------+ |
| | name? | |
| | event_type? | * |
| | <api> | |
| | <functions>* | |
| +---------------+ |
+----------------------+
flexでデータを取得するAPIは以下の三つがサポートされてます。
・command : シェルのコマンドから取得
・url : HTTPエンドポイントからの取得
・file : JSONやCSVからの取得
examplesを眺めてるとDBへの接続もできるみたいです。
使ってみる
今回はparse_htmlという機能を使ってHTMLページの中に含まれるテーブルのデータを取得してみたいと思います。
取得対象のHTMLを用意します。
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h3>Information</h3>
<table class="table">
<tr>
<th>Name</th><th>value</th><th>num</th><th>time</th>
</tr>
<td>row1</td>
<td align="center">value1</td>
<td align="right">1</td>
<td>2023-12-12 00:00:00</td>
</tr>
<tr>
<td>row2</td>
<td align="center">value2</td>
<td align="right">2</td>
<td>2023-12-12 00:00:00</td>
</tr>
</table>
</body>
</html>
次にflexの設定を用意します。
integrations:
- name: nri-flex
interval: 5m
config:
name: TestInfo
apis:
- name: TestInfo
event_type: TestInfo
url: #対象のURL
parse_html: true
parse_htmlをtrueに設定することで指定したurlから返ってきたhtmlの中からテーブルの情報をパースしてくれます。
設定を配置しテスト実行してみます。
sudo /var/db/newrelic-infra/newrelic-integrations/bin/nri-flex -config_file /etc/newrelic-infra/integrations.d/get_html_table.yml -pretty -verbose
上記のコマンドを叩くと以下のような出力になります。
{
"name": "com.newrelic.nri-flex",
"protocol_version": "3",
"integration_version": "1.9.1",
"data": [
{
"metrics": [
{
"Index": 0,
"Name": "row1",
"api.StatusCode": 200,
"class": "table",
"event_type": "TestInfo",
"integration_name": "com.newrelic.nri-flex",
"integration_version": "1.9.1",
"num": 1,
"time": "2023 12 12 00 00 00",
"value": "value1"
},
{
"Index": 0,
"Name": "row2",
"api.StatusCode": 200,
"class": "table",
"event_type": "TestInfo",
"integration_name": "com.newrelic.nri-flex",
"integration_version": "1.9.1",
"num": 2,
"time": "2023 12 12 00 00 00",
"value": "value2"
},
{
"event_type": "flexStatusSample",
"flex.Hostname": "mb11n01-1a.oem-dev.variocloud.local",
"flex.IntegrationVersion": "1.9.1",
"flex.counter.ConfigsProcessed": 1,
"flex.counter.EventCount": 2,
"flex.counter.EventDropCount": 0,
"flex.counter.HttpRequests": 1,
"flex.counter.TestInfo": 2,
"flex.time.elapsedMs": 547,
"flex.time.endMs": 1702263309623,
"flex.time.startMs": 1702263309076
}
],
"inventory": {},
"events": []
}
]
}
メトリクスのレコードにHTMLのテーブルデータがはいってるのがわかります。
終わりに
今回はNew Relic Flexを利用してHTMLのテーブル情報を取得してみました。
運用してる一部システムでステータス情報がHTMLでみれるものもあるので、そういうデータを入れておけばNew Relicで他のデータと突き合わせたりできて便利そうだなと思いました。
設定ファイルのexampleが沢山用意されているので自分のやりたい用途に合わせて探してみると面白いと思います。
以前にもNew Relic Flexを使ってネットワークの負荷状況を可視化した記事が書かれているので合わせてご覧いただければと思います。