監視 MySQL

在您安裝 Instana 代理程式之後,會自動部署並安裝 MySQL 感應器。

支援的作業系統

MySQL 感應器的受支援作業系統與主機代理程式需求一致,您可以在每一個主機代理程式的「受支援作業系統」區段中檢查這些需求,例如 Unix 的受支援作業系統

支援的版本

Instana 支援下列版本的 MySQL:

  • MySQL 5.6.x
  • MySQL 5.7.x
  • MySQL 8.0.x

配置

為了啟用深度度量值監視,您需要將存取監視資訊的認證通知代理程式。 您可以在代理程式 <agent_install_dir>/etc/instana/configuration.yaml中配置它:

com.instana.plugin.mysql:
  user: ''
  password: ''
  schema_excludes: ['INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA']

schema_excludes 欄位中插入的綱目名稱將從 Schemas 圖形中收集每個綱目的統計資料及監視中排除。

SSL/TLS 支援

若要讓 Instana 代理程式安全連接至 MySQL 資料庫,需要在 <agent_install_dir>/etc/instana/configuration.yaml這裡配置它:

com.instana.plugin.mysql:
  ...
  sslTrustStore: '/path/to/truststore.jks'
  sslTrustStorePassword: 'mySqlTsPassword'
  sslKeyStore: '/path/to/sslKeyStoreFile.jks'
  sslKeyStorePassword: 'mySqlKsPassword'
  disableSslHostnameVerification: false

金鑰必須採用 Java 金鑰儲存庫 格式 (JKS)。 keytool 可用來建立這些。

必要的資料庫許可權

若要讓感應器能夠收集 DBMS 的相關效能資訊,需要對綱目 PERFORMANCE_SCHEMA 的唯讀存取權。

  • 若為 8.0.0之前的 MySQL 版本,請參閱下列範例,以瞭解如何建立具有必要權限的帳戶:

    GRANT REPLICATION CLIENT ON *.* TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
    GRANT SELECT ON 'performance_schema'.'events_waits_summary_global_by_event_name' TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
    GRANT SELECT ON 'performance_schema'.'events_statements_summary_by_digest' TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
    GRANT SELECT ON 'performance_schema'.'events_statements_summary_global_by_event_name' TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
    GRANT SELECT ON 'performance_schema'.'replication_connection_status' TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
    
  • 若為 MySQL 8.0.0 版或更新版本,請參閱下列範例,以瞭解如何建立具有必要權限的帳戶:

    GRANT REPLICATION CLIENT ON *.* TO '<instana_mon_user>'@'localhost';
    GRANT SELECT ON performance_schema.events_waits_summary_global_by_event_name TO '<instana_mon_user>'@'localhost';
    GRANT SELECT ON performance_schema.events_statements_summary_by_digest TO '<instana_mon_user>'@'localhost';
    GRANT SELECT ON performance_schema.events_statements_summary_global_by_event_name TO '<instana_mon_user>'@'localhost';
    GRANT SELECT ON performance_schema.replication_connection_status TO '<instana_mon_user>'@'localhost';
    

附註: 若要收集交易度量值總計,您需要將 PROCESS 許可權授與使用者,並在綱目 information_schema.innodb_metrics中啟用計數器 'trx_nl_ro_commits'、'trx_ro_commits '、'trx_rollbacks' 及 'trx_rw_commits':

  • 若為 8.0.0之前的 MySQL 版本,若要將 PROCESS 許可權授與 SQL 使用者的所有資料庫綱目,請執行下列指令:

    GRANT PROCESS ON *.* TO <instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
    
  • 若為 MySQL 8.0.0 版或更新版本,若要授與 PROCESS 許可權給 SQL 使用者的所有資料庫綱目,請執行下列指令:

    GRANT PROCESS ON *.* TO '<instana_mon_user>'@'localhost';
    

    帳戶名稱的主機名稱部分取決於您的 MySQL 配置。

  • 若要啟用這些計數器,請執行下列指令:

    SET GLOBAL innodb_monitor_enable = 'trx_nl_ro_commits';
    SET GLOBAL innodb_monitor_enable = 'trx_ro_commits';
    SET GLOBAL innodb_monitor_enable = 'trx_rollbacks';
    SET GLOBAL innodb_monitor_enable = 'trx_rw_commits';
    

MySQL 8.0.0 版及更高版本支援

Instana 基於授權原因,無法提供 MySQL 8.0.0 版及更新版本的自動 MySQL 監視。 因此,需要從 https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.20 手動取得 MySQL 驅動程式 Jar 檔,並將其新增至 Instana 代理程式 deploy 資料夾: <agent_install_dir>/deploy/
從 Maven 儲存庫取得的 MySQL 驅動程式 Jar 檔應該具有 8.0.16 版或更新版本。

Deploy MySQL Connector jar in Kubernetes & OpenShift

若要在 Kubernetes 或 OpenShift 環境中部署 MySQL 連接器 jar 檔案,請使用起始設定儲存器。 當您使用 Helm 或靜態 YAML 進行部署時,需要將下列修改套用至 DeamonSet YAML ,以讓 init 儲存器下載 MySQL Connector jar 檔案:

spec:
  initContainers:
    - name: init-myservice
      image: 'registry.access.redhat.com/ubi8/ubi:latest'
      command:
        - sh
        - '-c'
        - >-
          curl
          https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar
          --output /instana/mysql-connector-java-8.0.28.jar
      resources: {}
      volumeMounts:
        - name: instanadeploy
          mountPath: /instana
    volumes:
    - name: instanadeploy
      emptyDir: {}

    containers:
      name: instana-agent
      volumeMounts:
        - name: instanadeploy
          mountPath: /opt/instana/agent/deploy

度量值集合

若要檢視度量值,請在「Instana 使用者」介面的資訊看板中選取 基礎架構 ,按一下特定的受監視主機,然後您可以看到具有所有已收集度量值及受監視處理程序的主機儀表板。

配置資料

  • 程序 ID
  • 版本
  • 開始時間
  • 角色
  • 連線數上限

效能度量

度量 說明 精度
查詢 查詢總數 1 秒
SELECTS 選取查詢數目 1 秒
UPDATES 更新查詢數 1 秒
INSERTS 插入查詢數 1 秒
DELETES 刪除查詢數 1 秒
其他 其他查詢數目 1 秒
慢速查詢 慢速查詢數 1 秒
錯誤 錯誤數 1 秒
已連接的執行緒 目前開啟的連線數目。 1 秒
等待事件 io 檔案, Socket ,表格; sync cond , mutex , rwlock 1 秒
已用連線數上限 已使用連線數上限 1 秒
中斷的連線 中止的連線數目 1 秒
讀取要求 讀取要求數 1 秒
寫入要求 寫入要求數 1 秒
每個綱目的查詢數 每個受監視綱目的查詢數 1 秒
每個綱目的平均查詢延遲 每個受監視綱目的平均查詢延遲時間 1 秒
儲存區頁面總數 InnoDB 緩衝池的大小總計 (以頁面為單位) 1 秒
可用的儲存區頁面數 InnoDB 緩衝池中的可用頁數 1 秒
儲存區頁面資料 InnoDB 緩衝池中包含資料的頁數 1 秒
儲存區頁面要求 邏輯讀取要求數 1 秒
已讀取的頁數 從 InnoDB 緩衝池讀取的頁數 1 秒
頁面大小 InnoDB 頁面大小 1 秒
快取命中率 基於 Innodb_buffer_pool_read_requests 及 Innodb_pages_read 的 InnoDB 快取命中率 1 秒
交易回應時間 交易的平均回應時間 1 秒
交易總數 innodb_metrics 表格中的交易總數。 它計算為下列計數器的計數總和: 'trx_nl_ro_commits '、'trx_ro_commits'、'trx_rollbacks '、'trx_rw_commits' 1 秒
連線錯誤連線數上限 由於伺服器 max_connections 限制而拒絕的連線數 1 秒
目前等待的列鎖定數 InnoDB 表格上的作業目前等待的列鎖定數 1 秒
列鎖定時間平均值 針對 InnoDB 表格獲得列鎖定的平均時間 (毫秒) 1 秒

抄寫度量值

度量 說明 精度
執行中的抄寫 I/O 執行緒 執行中的抄寫 I/O 執行緒: 0-no , 1-yes 1 秒
執行中的抄寫 SQL 執行緒 執行中的抄寫 SQL 執行緒: 0-no , 1-yes 1 秒
抄寫前次 I/O 錯誤碼 前次 I/O 抄寫錯誤的錯誤碼 1 秒
抄寫前次 SQL 錯誤碼 前次 SQL 抄寫錯誤的錯誤碼 1 秒
落後主節點的秒數 抄本落後來源的秒數 1 秒

性能簽章

每一個感應器都有一個精選的性能簽章知識庫,可以根據送入的度量對性能簽章進行持續評估,並根據使用者影響來觸發問題或發生事件。

內建事件 會根據實體上的性能簽章失敗來觸發問題或突發事件,而 自訂事件 會根據任何給定實體的個別度量值臨界值來觸發問題或突發事件。

如需 MySQL 感應器的建置事件相關資訊,請參閱 內建事件參照

疑難排解

依預設已停用效能綱目

如果有錯誤訊息,類似於:

java.sql.SQLSyntaxErrorException: (conn=2) Table 'performance_schema.global_status' doesn't exist

在 Instana 代理程式日誌中出現,很可能您的 MySQL 伺服器副本已在依預設停用效能綱目的情況下編譯。 這是 已知錯誤

若要修正此問題,您可以嘗試從 MySQL CLI 啟用它:

mysql> set @@global.show_compatibility_56=ON;
Query OK, 0 rows affected (0.00 sec)

並檢查它是否已啟用:

mysql>select @@show_compatibility_56;
+-------------------------+
| @@show_compatibility_56 |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (0.00 sec)

一旦啟用, mysql>show status; 現在應該可以運作。 請重新啟動 Instana 代理程式。

時區設定

如果有錯誤訊息,類似於:

The server time zone value 'CEST' is unrecognized or represents more than one time zone.
You must configure either the server or JDBC driver (via the serverTimezone configuration property) 
to use a more specifc time zone value if you want to utilize time zone support.

在 Instana 代理程式日誌中,需要配置伺服器時區。

這是 已知問題 ,因為 MySQL 未適當地讀取主機時區。

您可以依照 MySQL 伺服器時區支援中的說明來修正錯誤。

不支援 鑑別通訊協定

如果有錯誤訊息,類似於:

Client does not support authentication protocol requested by server

出現在 Instana 代理程式日誌中,您需要使用 mysql_native_password 而非 caching_sha2_password 機制:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
mysql> flush privileges;

連線錯誤

有時您可能會在 Instana 主機代理程式日誌中看到錯誤訊息,如下所示:

Agent could not connect to MySQL.  Could not connect: Access denied for user 'user'@'ipaddress/hostname' (using password: YES)

在此情況下,您需要變更 MySQL 使用者,以使用 MySQL 端中的另一個主機名稱。 例如,如果您以 user@localhost身分建立 MySQL 使用者,則需要將 MySQL 端中的使用者名稱變更為錯誤訊息中指出的 'user' @ 'ipaddress 或 hostname' ,然後使用不含主機名稱的 'username' 來更新代理程式配置檔中的 com.instana.plugin.mysql > users 欄位,因為代理程式會自動探索主機名稱。 在容器內執行 MySQL 時,可能會發生此錯誤。