見出し画像

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上でも確認できました


終わりに

今回はNew Relic Flexを利用してHTMLのテーブル情報を取得してみました。
運用してる一部システムでステータス情報がHTMLでみれるものもあるので、そういうデータを入れておけばNew Relicで他のデータと突き合わせたりできて便利そうだなと思いました。
設定ファイルのexampleが沢山用意されているので自分のやりたい用途に合わせて探してみると面白いと思います。

以前にもNew Relic Flexを使ってネットワークの負荷状況を可視化した記事が書かれているので合わせてご覧いただければと思います。


いいなと思ったら応援しよう!