Vous pouvez configurer les options suivantes pour obtenir des informations détaillées plus approfondies sur vos instances PostgreSQL :
Activer TLS
Le champ tls est facultatif, mais l’omettre n’équivaut pas à désactiver TLS explicitement : la configuration par défaut du Récepteur définit déjà insecure: false et insecure_skip_verify: true, de sorte que les connexions sont chiffrées (sslmode=require), mais le certificat du serveur n’est pas vérifié à moins que vous ne définissiez insecure_skip_verify: false et ne fournissiez un ca_file. La plupart des instances Amazon RDS et Aurora imposent SSL/TLS, vous souhaiterez donc généralement ajouter cette vérification pour ces environnements.
receivers: nrpostgresql: endpoint: <YOUR_HOST>:<YOUR_PORT> username: <YOUR_DB_USERNAME> password: <YOUR_DB_PASSWORD> collection_interval: 30s tls: insecure: false insecure_skip_verify: false ca_file: <PATH_TO_CA_CERTIFICATE> cert_file: <PATH_TO_CLIENT_CERTIFICATE> key_file: <PATH_TO_CLIENT_KEY>Conseil
cert_file/key_file ne sont nécessaires que si votre serveur PostgreSQL requiert le protocole TLS mutuel (authentification par certificat client) ; la plupart des configurations n’ont besoin que de ca_file pour vérifier le serveur. Pour Amazon RDS/Aurora, téléchargez l’ ensemble de certificats d’autorité de certification RDS approprié et référencez-le dans ca_file. Laissez insecure_skip_verify: true (la valeur par défaut) uniquement pour les tests sur des instances avec des certificats auto-signés, jamais en production.
Plans de requête pour les instructions d'écriture
Par défaut, EXPLAIN s'exécute directement en tant qu'utilisateur de monitoring, et PostgreSQL vérifie les privilèges de table lors de la planification. Cela signifie que les instructions de verrouillage de ligne ou d’écriture échouent avec permission denied à moins que l’utilisateur de monitoring n’ait un accès en écriture, ce qu’il ne devrait jamais avoir.
Pour collecter des plans de requête pour les instructions de verrouillage ou d'écriture sans accorder d'accès en écriture à l'utilisateur de monitoring, créez la fonction suivante dans chaque base de données :
CREATE OR REPLACE FUNCTION otel.explain_statement(l_query text)RETURNS jsonLANGUAGE plpgsqlSECURITY DEFINERAS $$DECLARE v_plan json; v_param_count int; v_nulls text := ''; i int;BEGIN SET TRANSACTION READ ONLY; SET plan_cache_mode = force_generic_plan;
EXECUTE 'PREPARE otel_explain_stmt AS ' || l_query;
SELECT COALESCE(array_length(parameter_types, 1), 0) INTO v_param_count FROM pg_prepared_statements WHERE name = 'otel_explain_stmt';
IF v_param_count > 0 THEN FOR i IN 1..v_param_count LOOP v_nulls := v_nulls || CASE WHEN i > 1 THEN ', ' ELSE '' END || 'null'; END LOOP; v_nulls := '(' || v_nulls || ')'; END IF;
EXECUTE 'EXPLAIN (FORMAT JSON) EXECUTE otel_explain_stmt' || v_nulls INTO v_plan; DEALLOCATE otel_explain_stmt; RETURN v_plan;EXCEPTION WHEN OTHERS THEN IF EXISTS (SELECT 1 FROM pg_prepared_statements WHERE name = 'otel_explain_stmt') THEN DEALLOCATE otel_explain_stmt; END IF; RAISE;END;$$;
GRANT EXECUTE ON FUNCTION otel.explain_statement(text) TO <YOUR_DB_USERNAME>;Mécanismes de collecte du plan d’exécution
- Limitation de débit :
top_query_collection.max_explain_each_interval(par défaut1000) limite le nombre d’appelsEXPLAINpar scrape. - Mise en cache :
query_plan_cache_size/query_plan_cache_ttl(par défaut1000entrées/1h) met en cache un plan une fois obtenu, indexé par l'ID de requête.
Documentation associée
Instrumentation dans les environnements auto-hébergés
Découvrez comment configurer le monitoring PostgreSQL dans des environnements auto-hébergés avec New Relic.
Référence des métriques
Découvrez les métriques disponibles collectées par le collecteur NRDOT.
Guide de dépannage
Apprenez à résoudre les problèmes courants liés au monitoring PostgreSQL.