先日の記事でSQL Serverのオンホストインテグレーションを紹介しました。
New Relic オンホストインテグレーションでMicrosoft SQL Serverを監視する
New Relicからサポート付きで提供しているのはWindows上のInfrastructureエージェントと一緒に動くWindows向けのバイナリなのですが、GitHubでソースが公開されており自分でビルドすることができます。今回Linux(Ubuntu18.04 LTS)上でビルドし、動作が確認できたのでご紹介したいと思います。
New Relicでも多数のリポジトリを公開しており、オンホストインテグレーションは先頭にnri-がついています。
MSSQLを始め、多くがgo言語で書かれておりクロスプラットフォーム向けにビルドが可能になっているようです。
ビルド済みのバイナリは提供されていないようですが、このリポジトリは次のようにビルドできます。go言語の環境設定に疎いので、次の手順でビルドできることは確認しましたが、好ましくない手順があればコメントいただければ幸いです。
まず、Ubuntu 18.04 LTSにこちらの手順に従い、パッケージマネージャー経由でgo言語のSDKをインストールします。
https://github.com/golang/go/wiki/Ubuntu
次にgo envコマンドを実行し、GOPATH、GOROOT、GOARCHが設定されていることを確認します。
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/clouduser/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/clouduser/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/lib/go-1.12"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.12/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build312533019=/tmp/go-build -gno-record-gcc-switches"
$GOPATH/binをPATH環境変数に追加します。
$ export PATH=$PATH:/home/clouduser/go/bin
そしてリポジトリをcloneしますが、$GOPATH/srcの配下かつ次のディレクトリ構造となるようにします。
$ cd ~
$ mkdir -p go/src/github.com/newrelic/
$ cd go/src/github.com/newrelic/
$ git clone https://github.com/newrelic/nri-mssql.git
$ cd nri-mssql
最新のリリースタグをチェックアウトしてビルドを実行します。正常に完了すると、binの下に成果物が生成されます。
$ git checkout v2.0.2
$ make
$ file bin/nr-mssql
bin/nr-mssql: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, not stripped
これでビルドは完了です。ここからこのインテグレーションをInfrastrucutreエージェントに追加します。LinuxのInfrastrucutreエージェントをあらかじめインストールしておいてください。パッケージマネージャーを利用する場合の手順はこちらにあります。
またWindowsの場合と同様、監視対象のSQL Serverにログインとユーザーを作って、接続権限の設定を行っておきます。
USE master;
CREATE LOGIN newrelic WITH PASSWORD = '<password>';
CREATE USER newrelic FOR LOGIN newrelic;
GRANT CONNECT SQL TO newrelic;
GRANT VIEW SERVER STATE TO newrelic;
-- Goes through each user database and adds public permissions
DECLARE @name NVARCHAR(max)
DECLARE db_cursor CURSOR FOR
SELECT NAME
FROM master.dbo.sysdatabases
WHERE NAME NOT IN ('master','msdb','tempdb','model')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE('USE "' + @name + '"; CREATE USER newrelic FOR LOGIN newrelic;' );
FETCH next FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
リポジトリにあるmssql-definition.ymlと、ビルド成果物のbin/nri-mssqlを/var/db/newrelic-infra/newrelic-integrationsにコピーします。nri-mssqlは実行可能になっていることを確認してください。
$ sudo ls /var/db/newrelic-infra/newrelic-integrations/* -l
-rw-r--r-- 1 root root 214 Jul 31 03:07 /var/db/newrelic-infra/newrelic-integrations/mssql-definition.yml
/var/db/newrelic-infra/newrelic-integrations/bin:
total 8108
-rwxr-xr-x 1 root root 8302273 Jul 31 03:08 nr-mssql
リポジトリにあるmssql-config.yml.sample ファイルを/etc/newrelic-infra/integrations.d/mssql-config.ymlとしてコピーし、次のように記載します。
integration_name: com.newrelic.mssql
instances:
- name: mssql-server
command: all_data
arguments:
hostname: localhost
username: newrelic
password: <Password>
labels:
env: production
role: mssql
type: linux
ここまで設定できれば、Infrastrucureエージェントを再起動します。
$ sudo systemctl restart newrelic-infra
あとはログをみて正常に動いていることを確認しましょう。
$ journalctl -u newrelic-infra.service -f
正常に動いていれば、数分すればMSSQL Dashboardに表示されるようになるはずです。
GitHubで公開されているコードは直接サポートするものではありませんが、このような使い方もできるのでぜひ参考にしてみてください。