Open4

NewRelic MySQL Integration

dehio3dehio3

integration構成ファイルのdry run

https://docs.newrelic.com/jp/docs/infrastructure/host-integrations/troubleshooting/run-integrations-manually/

# /usr/bin/newrelic-infra -dry_run -integration_config_path /etc/newrelic-infra/integrations.d/mysql-config.yml 
time="2024-10-05T15:21:23Z" level=error msg="Failed to load integration definition" component=integrations.runner.Runner error="can't instantiate integration: can't find an executable given the name: nri-mysql" integration_name=nri-mysql
time="2024-10-05T15:21:23Z" level=warning msg="can't instantiate integrations from file" component=integrations.Manager error="can't instantiate integration: can't find an executable given the name: nri-mysql" file=/etc/newrelic-infra/integrations.d/mysql-config.yml
dehio3dehio3

infra-agentにnri-mysqlを入れる

infra-agentはalpine
https://github.com/newrelic/infrastructure-agent/blob/master/build/container/Dockerfile

Integrationのインストール手順の対象OSにalpineがない。apkでのインストール方法も記載ない
https://docs.newrelic.com/docs/infrastructure/host-integrations/installation/install-infrastructure-host-integrations/

Assetsからarm.tar.gzを取得してインストールする

/tmp # curl -L https://github.com/newrelic/nri-mysql/releases/download/v1.10.11/nri-mysql_linux_1.10.11_arm.tar.gz -o /tmp/nri-mysq
l.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 1991k  100 1991k    0     0  3747k      0 --:--:-- --:--:-- --:--:-- 3747k
/tmp # tar -xzf /tmp/nri-mysql.tar.gz
/tmp # ls
etc               nr-integrations   nri-mysql.tar.gz  var
/tmp # ls -lR
.:
total 2004
drwxr-xr-x    3 root     root          4096 Oct  5 16:09 etc
drwxr-xr-x    2 root     root          4096 Oct  5 16:09 nr-integrations
-rw-r--r--    1 root     root       2038877 Oct  5 16:09 nri-mysql.tar.gz
drwxr-xr-x    3 root     root          4096 Oct  5 16:09 var

./etc:
total 4
drwxr-xr-x    3 root     root          4096 Oct  5 16:09 newrelic-infra

./etc/newrelic-infra:
total 4
drwxr-xr-x    2 root     root          4096 Oct  5 16:09 integrations.d

./etc/newrelic-infra/integrations.d:
total 4
-rw-r--r--    1 1001     127           1387 Sep 16 05:36 mysql-config.yml.sample

./nr-integrations:
total 12
-rw-r--r--    1 root     root          5508 Oct  5 16:09 com.newrelic.docker-322be073a3fb0aca0b6122cbaa60d5ca.json
-rw-r--r--    1 root     root           436 Oct  5 16:09 container_cpus.json

./var:
total 4
drwxr-xr-x    3 root     root          4096 Oct  5 16:09 db

./var/db:
total 4
drwxr-xr-x    3 root     root          4096 Oct  5 16:09 newrelic-infra

./var/db/newrelic-infra:
total 4
drwxr-xr-x    3 root     root          4096 Oct  5 16:09 newrelic-integrations

./var/db/newrelic-infra/newrelic-integrations:
total 8
drwxr-xr-x    2 root     root          4096 Oct  5 16:09 bin
-rw-r--r--    1 1001     127            232 Sep 16 05:36 mysql-definition.yml

./var/db/newrelic-infra/newrelic-integrations/bin:
total 4868
-rwxr-xr-x    1 root     root       4980888 Sep 16 05:37 nri-mysql

https://docs.newrelic.com/docs/infrastructure/host-integrations/installation/install-infrastructure-host-integrations/#tarball

定義ファイルを含むバイナリをエージェント ディレクトリnewrelic-integrations内またはcustom-integrationsに配置します。

# Step 1: Use New Relic Infrastructure Agent as the base image
FROM newrelic/infrastructure:latest

# Step 2: Install necessary tools for downloading nri-mysql
RUN apk add --no-cache curl ca-certificates

# Step 3: Download and extract the ARM version of nri-mysql binary from GitHub releases
RUN curl -L https://github.com/newrelic/nri-mysql/releases/download/v1.10.11/nri-mysql_linux_1.10.11_arm.tar.gz -o /tmp/nri-mysql.tar.gz && \
    tar -xzf /tmp/nri-mysql.tar.gz -C / && \
    rm /tmp/nri-mysql.tar.gz

# Step 4: Ensure the nri-mysql binary is executable
RUN chmod +x /var/db/newrelic-infra/newrelic-integrations/bin/nri-mysql

# Step 5: Copy the MySQL integration configuration file
COPY mysql-config.yml /etc/newrelic-infra/integrations.d/mysql-config.yml

# Step 6: Define the entry point for New Relic Infrastructure Agent
CMD ["newrelic-infra"]
dehio3dehio3

nri-mysqlのデフォルトのMetrisc

https://docs.newrelic.com/install/mysql/#default-metrics

イベント属性名 次元メトリクス名 説明
cluster.slaveRunning mysql.node.cluster.slaveRunning ブール値。レプリケーションスレーブがマスターに接続されており、I/OおよびSQLスレッドが稼働していれば1、そうでなければ0。レプリケーションスレーブのメトリクスも参照。
db.handlerRollbackPerSecond mysql.node.handler.rollbackPerSecond ストレージエンジンに対するロールバック操作のリクエストの1秒あたりのレート。
db.innodb.bufferPoolPagesData mysql.node.innodb.bufferPool.pagesData InnoDBバッファプールにデータが含まれるページの数。
db.innodb.bufferPoolPagesFree mysql.node.innodb.bufferPool.pagesFree InnoDBバッファプール内の空きページの数。
db.innodb.bufferPoolPagesTotal mysql.node.innodb.bufferPool.pagesTotal InnoDBバッファプールの総ページ数。
db.innodb.dataReadBytesPerSecond mysql.node.innodb.dataReadBytesPerSecond InnoDBテーブルから読み取られたデータの1秒あたりのバイト数。
db.innodb.dataWrittenBytesPerSecond mysql.node.innodb.dataWrittenBytesPerSecond InnoDBテーブルに書き込まれたデータの1秒あたりのバイト数。
db.innodb.logWaitsPerSecond mysql.node.innodb.logWaitsPerSecond ログバッファが小さすぎてフラッシュ待機が必要だった回数(1秒あたり)。
db.innodb.rowLockCurrentWaits mysql.node.innodb.rowLockCurrentWaits InnoDBテーブルにおける現在待機中の行ロックの数。
db.innodb.rowLockTimeAvg mysql.node.innodb.rowLockTimeAvg InnoDBテーブルに対する行ロック取得の平均時間(ミリ秒)。
db.innodb.rowLockWaitsPerSecond mysql.node.innodb.rowLockWaitsPerSecond InnoDBテーブルでの行ロック待機が発生した回数(1秒あたり)。
db.openedTablesPerSecond mysql.node.openedTablesPerSecond 1秒あたりにmy_open()で開かれたファイルの数。サーバーが他の方法で開いたファイルはカウントされない。
db.openFiles mysql.node.openFiles 現在開いているファイルの数。通常ファイルのみをカウントし、ソケットやパイプなどは含まない。
db.openTables mysql.node.openTables 現在開いているテーブルの数。
db.qCacheFreeMemoryBytes mysql.node.qCache.freeMemoryBytes クエリキャッシュの空きメモリのバイト数。
db.qCacheHitRatio mysql.node.qCache.hitRatio クエリキャッシュから取得されたクエリの割合。
db.qCacheNotCachedPerSecond mysql.node.qCache.notCachedPerSecond クエリキャッシュにキャッシュされなかったクエリの数(1秒あたり)。
db.qCacheUtilization mysql.node.qCache.utilization クエリキャッシュメモリの使用率(%)。
db.tablesLocksWaitedPerSecond mysql.node.tablesLocksWaitedPerSecond テーブルロックのリクエストがすぐに許可されず、待機が必要だった回数(1秒あたり)。
net.abortedClientsPerSecond mysql.node.net.abortedClientsPerSecond クライアントが接続を正常に閉じることなく死んだために中断された接続の数(1秒あたり)。
net.abortedConnectsPerSecond mysql.node.net.abortedConnectsPerSecond MySQLサーバーへの接続試行が失敗した回数(1秒あたり)。
net.bytesReceivedPerSecond mysql.node.net.bytesReceivedPerSecond クライアントから受信したバイト数(1秒あたり)。
net.bytesSentPerSecond mysql.node.net.bytesSentPerSecond クライアントに送信されたバイト数(1秒あたり)。
net.connectionErrorsMaxConnectionsPerSecond mysql.node.net.connectionErrorsMaxConnectionsPerSecond サーバーがmax_connectionsに達したために拒否された接続の数(1秒あたり)。
net.connectionsPerSecond mysql.node.net.connectionsPerSecond 1秒あたりの接続試行数。
net.maxUsedConnections mysql.node.net.maxUsedConnections サーバー起動以来、同時に使用されていた最大の接続数。
net.threadsConnected mysql.node.net.threadsConnected 現在開いている接続数。
net.threadsRunning mysql.node.net.threadsRunning スリープ状態でないスレッドの数。
query.comCommitPerSecond mysql.node.query.commitPerSecond 1秒あたりに実行されたCOMMITステートメントの数。
query.comDeletePerSecond mysql.node.query.deletePerSecond 1秒あたりに実行されたDELETEステートメントの数。
query.comDeleteMultiPerSecond mysql.node.query.deleteMultiPerSecond 複数テーブルを使用するDELETEステートメントが実行された数(1秒あたり)。
query.comInsertPerSecond mysql.node.query.insertPerSecond 1秒あたりに実行されたINSERTステートメントの数。
query.comInsertSelectPerSecond mysql.node.query.insertSelectPerSecond 1秒あたりに実行されたINSERT SELECTステートメントの数。
query.comReplaceSelectPerSecond mysql.node.query.replaceSelectPerSecond 1秒あたりに実行されたREPLACE SELECTステートメントの数。
query.comRollbackPerSecond mysql.node.query.rollbackPerSecond 1秒あたりに実行されたROLLBACKステートメントの数。
query.comSelectPerSecond mysql.node.query.selectPerSecond 1秒あたりに実行されたSELECTステートメントの数。
query.comUpdateMultiPerSecond mysql.node.query.updateMultiPerSecond 複数テーブルを使用するUPDATEステートメントが実行された数(1秒あたり)。
query.comUpdatePerSecond mysql.node.query.updatePerSecond 1秒あたりに実行されたUPDATEステートメントの数。
query.preparedStmtCountPerSecond mysql.node.query.preparedStmtCountPerSecond 現在の準備されたステートメント数(1秒あたり)。最大値はmax_prepared_stmt_countシステム変数で指定される。
query.queriesPerSecond mysql.node.query.queriesPerSecond サーバーが実行した全ステートメントの数(1秒あたり)。ストアドプログラム内で実行されたステートメントも含む。
query.questionsPerSecond mysql.node.query.questionsPerSecond クライアントから送信されたステートメントの数(1秒あたり)。
query.slowQueriesPerSecond mysql.node.query.slowQueriesPerSecond long_query_time秒以上かかったクエリの数(1秒あたり)。スロークエリログが有効かどうかにかかわらずカウントされる。