1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

New Relic 使ってみた情報をシェアしよう! by New RelicAdvent Calendar 2022

Day 11

New Relic-Flexを使用した🦍ゴリ押し🦍構成管理

Last updated at Posted at 2022-12-10

課題

運用チームがメインで管理している構成管理データベースだが、セキュリティ調査や商用環境の状態確認ということで開発や営業から情報を聞かれることがよくある。
その度に運用側で情報を確認して伝達するというフローが発生し、非常にボトルネックとなっていた。
しかし、自社サービスは諸事情でオンプレ稼働しており、簡単にサーバ情報を外に出すことができない。
営業・開発・運用のどのチームでも見られることができるスマートなプラットフォームが無いだろうか。。。

と思っていたら、New Relicにそれっぽい機能があった。

New Relicの構成管理機能とその問題

New Relicにはどのミドルウェアがどのサーバで使われているかが一目瞭然となる機能がInfrastructureにある。
↓こんな感じで
image.png
これをダッシュボードに載せればと思ったが、NRQLで引くことがなんと不可能であった。Graphqlを通して無理やりダッシュボードに載せても閲覧することができなかった。
チームメンバ全員にFull userアカウントを買うのは非現実的すぎるし、この機能のためだけにというのはあまりに無駄である。

こうなったらもはやゴリ押しするしかない! ということで、New Relic-Flexを使用して情報を収集する。

New Relic-Flexで構成情報収集

New Relic-Flexの仕様

New Relic-Flexについては、こちら を参照
要約すると、「コマンドの実行結果をNew Relicに転送して任意のDBテーブルとして保存する」という機能である。データカラムを定義してコマンドの出力結果を区切り文字で区切ることで、カラムに対応するデータとして保存する。
この機能を利用するにあたって壁となったのは、「コマンドの出力結果は行単位でデータとして保存される」という仕様。コマンドの出力結果が複数行に分かれると1行ごとに別データとして保存されてしまう。
例えば、Apache_versionというカラムを定義してhttpd -vの結果を収集しようとすると

Server version: Apache/2.4.37 (centos)
Server built:   Jun  8 2020 20:14:33

これは、

Timestamp Apache_version
2022-12-11 HH:MM:ss Server version: Apache/2.4.37 (centos)
2022-12-11 HH:MM:ss Server built: Jun 8 2020 20:14:33

このように別のイベントデータとして収集されてしまう。そのため、複数行のデータを1行にまとめる必要があり、ここが一番苦戦した。

ゴリ押し構成情報出力シェル

結論として、以下のようにxargsとechoを利用して1行にまとめつつ改行コードを文字列化するというあまりにゴリ押しの実装を行った。

httpd -v | xargs -I{} echo -n {}\\r\\n; echo -ne "\t"

これを実行すると

Server version: Apache/2.4.37 (centos)\r\nServer built:   Jun  8 2020 20:14:33

というように改行が改行コードの文字列に変換され、末尾にタブを追加した文字列が出力される。

さらにechoのnオプションで末尾は改行されないので、

#!/bin/bash

httpd -v | xargs -I{} echo -n {}\\r\\n; echo -ne "\t"
openssl version | xargs -I{} echo -n {}\\r\\n; echo -ne "\t"

というようにxargsとechoを追加したコマンドを並べたシェルを実行すると、

Server version: Apache/2.4.37 (centos)\r\nServer built:   Jun  8 2020 20:14:33[タブ]OpenSSL 1.1.1f  31 Mar 2020\r\n[タブ]

という1行でタブ区切りのコマンド結果が出力できる。

あとは、integration.d配下に以下を記載したymlを置いて、

integrations:
  - name: nri-flex
    interval: 21600s
    timeout: 900s
    config:
      name: collectCMDB_Integration
      apis:
        - name: middleware
          commands:
            - run: 'sh [構成情報収集シェルのパス]'
              split: horizontal
              split_by: \t
              timeout: 60000
              set_header: [Apache_version,OpenSSL_version]

先ほどのシェルをInfraエージェントに実行させると、New Relicにmiddlewaresampleという以下のようなテーブルが作成される。

Timestamp Apache_version OpenSSL_version
2022-12-11 HH:MM:ss Server version: Apache/2.4.37 (centos)\r\nServer built: Jun 8 2020 20:14:33 OpenSSL 1.1.1f 31 Mar 2020\r\n

他の構成情報もまとめたければ、シェルに好きなコードを書いて同様のパイプを噛ませることで自由に構成情報を収集できる。

まとめ

必要な情報をgrepして1行ごとに情報を出力すればいいのではと思うかもしれないが、10行程度の出力全てが必要な構成情報というパターンもあり得る。
New Relicデータベース上に記録される文字列としては1行にまとめられているせいで改行コードなどが不細工だが、GASでGraphqlを叩いてスプレッドシートに成形するなどすれば、見栄えはどうとでもなる。
New Relic使用中でかつオンプレなどで構成情報収集が面倒だという方は参考にしていただけると。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?