À l’étape précédente, vous avez créé et affiné votre plan d’optimisation des données en comparant votre rapport de base de référence aux objectifs de votre organisation. Une fois que vous avez aligné vos données et les avez mesurées par rapport à vos facteurs de valeur, vous pouvez commencer à optimiser, et potentiellement à réduire, vos données ingérées. Il existe deux manières principales de procéder :
- Optimiser l'efficacité des données
- Optimiser en utilisant des règles de dépôt
Nous aborderons les deux méthodes ci-dessous, ainsi que toutes les configurations possibles fournies par chaque option.
Optimiser l'efficacité des données
Cette section comprend différentes manières de configurer la fonctionnalité New Relic pour optimiser le reporting des données et l'ingestion :
Les moteurs de la croissance
- Transactions monitorées
- Activité d'erreur
- Événements personnalisés
Le volume de données généré par l'agent APM sera déterminé par plusieurs facteurs :
La quantité de trafic organique générée par l'application (par exemple, toutes choses étant égales par ailleurs, une application appelée un million de fois par jour générera plus de données qu'une application appelée mille fois par jour)
Certaines des caractéristiques des données de transaction sous-jacentes elles-mêmes (longueur et complexité des URL)
Si l'application rapporte une requête de base de données
Si l'application a des transactions avec de nombreux (ou aucun) attribut personnalisé
Le volume d'erreur pour l'application
Si l'agent d'application est configuré pour le tracing distribué
Gestion du volume
Bien que vous puissiez supposer que tous les appels à une application sont nécessaires, il est possible de rendre votre architecture globale plus efficace. Vous pouvez avoir un microservices de profil utilisateur appelé toutes les 10 secondes par ses clients. Cela permet de réduire la latence si certaines informations utilisateur sont mises à jour par d’autres clients. Vous avez toutefois la possibilité de réduire la fréquence des appels vers ce service à chaque minute, par exemple.
Les attributs personnalisés
Tout attribut personnalisé ajouté à l’aide d’un appel à une API APM
addCustomParameterajoutera un attribut supplémentaire aux frais de transaction. Ces données sont souvent utiles, mais à mesure que les choses changent, elles peuvent devenir moins précieuses, voire obsolètes.L'agent Java capture les éléments
request.headerssuivants par défaut :request.headers.refererrequest.headers.acceptrequest.headers.contentLengthrequest.headers.hostrequest.headers.userAgentLes développeurs peuvent également utiliser
addCustomParameterpour capturer plus d’informations à l’aide d’en-têtes plus détaillés.Pour un exemple de la riche configuration disponible par rapport à APM, consultez notre documentation sur l'agent Java
Événement d'erreur
Il est possible de réduire le volume de données en trouvant comment APM gérera les erreurs. Par exemple, il peut y avoir une erreur inoffensive mais à volume élevé que vous ne pouvez pas supprimer pour le moment.
Pour ce faire, vous pouvez utiliser
collect,ignoreoumark as expectedpour les erreurs. Pour plus d'informations, voir Gérer les erreurs APM.requête de base de données
Un aspect très variable de l'instance APM est le nombre d'appels de base de données et la configuration de l'ensemble. Pour vous aider, vous pouvez contrôler le degré de détail monitoring des requêtes de base de données. Ces requêtes apparaîtront sur la page Transaction traces .
Les modifications courantes des paramètres de requête de base de données incluent :
Modification du seuil de trace d'appels.
Activation de la requête expliquant la collection de plans.
Pour plus de détails, voir la page trace de transaction requête de base de données.
Définition des limites d'événements
Nos agents APM et mobiles ont des limites quant au nombre d'événements qu'ils peuvent signaler par cycle de collecte. S'il n'y avait pas de limite, un nombre suffisamment important d'événements envoyés pourrait impacter les performances de votre application ou de New Relic. Une fois la limite atteinte, les agents commencent à échantillonner l'événement pour donner une représentation de l'événement à travers le cycle de collecte. Différents agents ont des limites différentes.
événement qui, avec des limites et sous réserve d'échantillonnage, comprend :
événement personnalisé signalé via l'API d'agent (par exemple, le
RecordCustomEventde l'agent .NET)MobileMobileCrashMobileHandledExceptionMobileRequestSpan(voir l'échantillonnage de tracing distribué)TransactionTransactionErrorLa plupart des agents disposent d'options configuration permettant de modifier la limite d'événements sur les transactions échantillonnées. Par exemple, l'agent Java utilise
max_samples_stored. La valeur par défaut pourmax_samples_storedest2000et la valeur maximale est10000. Cette valeur régit le nombre d'événements échantillonnés pouvant être signalés toutes les 60 secondes à partir d'une instance d'agent. Pour une explication complète des limites d'échantillonnage d'événement, voir limites d'événement.Vous pouvez compenser l'événement échantillonné via NRQL
EXTRAPOLATEl'opérateur.Avant de tenter de modifier la manière dont l’échantillonnage se déroule, gardez à l’esprit les points suivants :
Plus vous signalez d'événements, plus votre agent utilisera de mémoire.
Vous pouvez généralement obtenir les données dont vous avez besoin sans augmenter la limite de rapport d'événements d'un agent.
La limite de taille de charge est de 1 Mo (10^6 octets) (compressé), donc le nombre d'événements peut toujours être affecté par cette limite. Pour savoir si des événements sont supprimés, consultez le log de l'agent pour un message d'état
413 HTTP.taux d'échantillonnage logarithmique
Les versions plus récentes des agents de langage New Relic APM peuvent transférer les logs directement vers New Relic. Parfois, vous souhaiterez peut-être définir certaines limites quant à l'ampleur des pics de logging de chaque instance d'agent APM.
Pour plus de détails sur l'échantillonnage log de l'agent APM, voir redirecteur de logs.
Trace de transaction
Les moteurs de la croissance
- Nombre de services connectés
- Nombre d'appels de méthode monitorés par services connectés
Dans APM, tracez les enregistrements de transactions en détail sur les transactions de votre application et les appels de base de données. Vous pouvez modifier les paramètres par défaut pour le suivi de transaction.
Ceci est également hautement configurable via la trace de transaction configuration. Le niveau et le mode de configurabilité seront spécifiques à la langue.
Les paramètres trace de transaction disponibles à l'aide de configuration côté serveur diffèrent en fonction de l'agent New Relic que vous utilisez. L'interface utilisateur comprend des descriptions de chacun. Les paramètres de l'interface utilisateur peuvent inclure :
Traçage des transactions et seuil
Enregistrement SQL, y compris le niveau d'enregistrement et les champs de saisie
Seuil de Log SQL et trace d'appels
Plans et seuils de requêtes SQL
Collecte d'erreurs, y compris le code HTTP et la classe d'erreur
requête de traçage de lentille
Profileur de filetage
Tracing distribué
Configuration du tracing distribuée présente certaines différences spécifiques à chaque langue. Vous pouvez désactiver le tracing distribué selon vos besoins. Ceci est un exemple pour l'agent Java
newrelic.yml:distributed_tracing:enabled: falseCeci est un exemple de node.js pour
newrelic.jsdistributed_tracing: {enabled: false}Le volume de données varie également selon que vous utilisez ou non Infinite Tracing. Le tracing distribué standard pour les agents APM (ci-dessus) capture jusqu'à 10 % de votre trace, mais si vous souhaitez analyser toutes vos données et trouver la trace la plus pertinente, vous pouvez configurer l'Infinite Tracing. Cette alternative au tracing distribué standard est disponible pour tous les agents de langage APM. Les principaux paramètres qui pourraient entraîner une légère augmentation de l'ingestion mensuelle sont :
Configurer le monitoring de l'observateur de trace
Configurer le filtre de trace d’attribut span
Configurer un filtre de trace aléatoire
Les moteurs de la croissance
- Chargement des pages
- Appels Ajax
- Activité d'erreur
Pour la version 1211 ou supérieure de l'agent de navigateur , toutes requests réseau effectuées par une page sont enregistrées comme événement AjaxRequest. Vous pouvez utiliser les options configuration de la liste de refus dans la page d'interface utilisateur des paramètres de l'application pour filtrer requests qui enregistrent l'événement. Quel que soit ce filtre, toutes requests réseau sont capturées sous forme de métriques et disponibles dans la page AJAX.
Utilisation de la liste de refus
Vous pouvez bloquer requests de trois manières :
Pour bloquer l'enregistrement de tous
AjaxRequestévénements, ajoutez un astérisque*comme caractère générique.Pour bloquer l'enregistrement de
AjaxRequestévénement sur un domaine, entrez simplement le nom du domaine. Exemple:example.comPour bloquer l'enregistrement de l'événement
AjaxRequestdans un domaine et un chemin spécifiques, entrez le domaine et le chemin. Exemple:example.com/pathLe protocole, le port, la recherche et le hachage d'une URL sont ignorés par la liste de refus.
Pour valider si les filtres que vous avez ajoutés fonctionnent comme prévu, exécutez une requête NRQL pour
AjaxRequestévénement correspondant à votre filtre.Accéder à la liste de refus
Pour mettre à jour la liste de refus des URL que votre application filtrera pour empêcher la création d'événements, accédez à la page d'interface utilisateur des paramètres de l'application :
Allez à one.newrelic.com et cliquez sur Browser.
Sélectionnez une application.
Dans la navigation de gauche, cliquez sur App settings.
Sous Ajax request deny list, ajoutez les filtres que vous souhaitez appliquer.
Sélectionnez Save application settings pour mettre à jour la configuration de l'agent.
Redéployez l'agent du navigateur en redémarrant l'agent APM associé ou en mettant à jour l'installation du navigateur par copier/coller.
Validation
FROM AjaxRequest SELECT * WHERE requestUrl LIKE `%example.com%`
Les moteurs de la croissance
- Utilisateurs actifs mensuels
- Crash événement
- Nombre d'événement par utilisateur
Android
Tous les paramètres, y compris l'appel pour invoquer l'agent, sont appelés dans la méthode onCreate de la classe MainActivity . Pour modifier les paramètres, appelez le paramètre de l'une des deux manières suivantes (si le paramètre le prend en charge) :
NewRelic.disableFeature(FeatureFlag.DefaultInteractions);NewRelic.enableFeature(FeatureFlag.CrashReporting);NewRelic.withApplicationToken(NEW_RELIC_TOKEN).start(this.getApplication());Les paramètres d'analyse activent ou désactivent la collecte de données d'événement. Ces événements sont signalés et utilisés dans la page Crash analysis .
Il est également possible de configurer le logging de l'agent pour qu'il soit plus ou moins détaillé.
iOS
Comme avec Android, configuration iOS de New Relic permet d'activer et de désactiver les indicateurs de fonctionnalité.
Vous pouvez configurer les indicateurs de fonctionnalité suivants :
Rapports de plantage et d'erreurs
NRFeatureFlag_CrashReportingNRFeatureFlag_HandleExceptionEventsNRFeatureFlag_CrashReporting
Tracing distribué
NRFeatureFlag_DistributedTracing
interaction
NRFeatureFlag_DefaultInteractionsNRFeatureFlag_InteractionTracingNRFeatureFlag_SwiftInteractionTracing
Drapeaux de fonctionnalité du réseau
NRFeatureFlag_ExperimentalNetworkInstrumentationNRFeatureFlag_NSURLSessionInstrumentationNRFeatureFlag_NetworkRequestEventsNRFeatureFlag_RequestErrorEventsNRFeatureFlag_HttpResponseBodyCapture
Pour plus de détails, voir les indicateurs de fonctionnalité.
Les moteurs de la croissance
- Hôtes et conteneurs monitorés
- Taux d'échantillonnage pour l'événement principal
- Configuration de l'échantillon de processus
- Les attributs personnalisés
- Nombre et type d'intégration sur hôte installée
- Configuration du transfert des logs
Le fichier de configuration de l'agent d'infrastructure contient deux manières de contrôler le volume d'ingestion. Le contrôle d’ingestion le plus important est la configuration des taux d’échantillonnage. Il existe plusieurs configurations de fréquence d'échantillonnage distinctes que vous pouvez ajuster. Il est également possible de créer des expressions régulières pour contrôler ce qui est collecté à partir de certains collecteurs, tels que ProcessSample et NetworkSample.
Taux d'échantillonnage configurables
Il existe un certain nombre de taux d'échantillonnage que vous pouvez configurer dans l'infrastructure, mais ceux-ci sont les plus couramment utilisés.
| paramètres | Défaut | Désactiver |
|---|---|---|
metrics_storage_sample_rate | 5 | -1 |
metrics_process_sample_rate | 20 | -1 |
metrics_network_sample_rate | 10 | -1 |
metrics_system_sample_rate | 5 | -1 |
metrics_nfs_sample_rate | 5 | -1 |
Échantillons de processus
Les échantillons de processus constituent souvent la source de données la plus volumineuse provenant de l’agent d’infrastructure, car ils envoient des informations sur tout processus en cours d’exécution sur un hôte. Ils sont désactivés par défaut, mais vous pouvez les activer comme suit :
enable_process_metrics: trueCela a le même effet que de définir metrics_process_sample_rate sur -1. Par défaut, les processus utilisant une faible mémoire sont exclus de l'échantillonnage. Pour plus d'informations, voir disable-zero-mem-process-filter.
Vous pouvez contrôler la quantité de données que vous envoyez en configurant include_matching_metrics, ce qui vous permet de restreindre la transmission de données métriques en fonction des valeurs de l'attribut métrique. Vous incluez des données métriques en définissant des valeurs littérales ou partielles pour l'un des attributs de la métrique. Par exemple, vous pouvez choisir d'envoyer le host.process.cpuPercent de tous les processus dont le process.name correspond aux ^java expressions régulières.
Dans cet exemple, nous incluons les métriques de processus à l'aide de fichiers exécutables et de noms :
include_matching_metrics: # You can combine attributes from different metrics process.name: - regex "^java" # Include all processes starting with "java" process.executable: - "/usr/bin/python2" # Include the Python 2.x executable - regex "\\System32\\svchost" # Include all svchost executablesVous pouvez également utiliser ce filtre pour l'intégration Kubernetes :
env: - name: NRIA_INCLUDE_MATCHING_METRICS value: | process.name: - regex "^java" process.executable: - "/usr/bin/python2" - regex "\\System32\\svchost"Filtre d'interface réseau
Les moteurs de la croissance
- Nombre d'interfaces réseau monitorées
La configuration utilise un mécanisme de recherche de modèles simple qui peut rechercher des interfaces commençant par une séquence spécifique de lettres ou de chiffres suivant l'un ou l'autre modèle :
{name}[other characters][number]{name}[other characters], où vous spécifiez le nom à l'aide de l'optionindex-1
network_interface_filters: prefix: - dummy - lo index-1: - tunFiltres d'interface réseau par défaut pour Linux :
- Interfaces réseau commençant par
dummy,lo,vmnet,sit,tun,tapouveth - Interfaces réseau contenant
tunoutap
Filtres d’interface réseau par défaut pour Windows :
- Interfaces réseau commençant par
Loop,isatapouLocal
Pour remplacer les valeurs par défaut, incluez votre propre filtre dans le fichier de configuration :
network_interface_filters: prefix: - dummy - lo index-1: - tunLes attributs personnalisés
Les attributs personnalisés sont des paires valeur-clé similaires aux balises dans d'autres outils utilisés pour annoter les données de l'agent infrastructure . Vous pouvez utiliser ces métadonnées pour créer des ensembles de filtres, regrouper vos résultats et annoter vos données. Par exemple, vous pouvez indiquer l'environnement d'une machine (simulation ou production), le service hôte d'une machine (service de connexion, par exemple) ou l'équipe responsable de cette machine.
Exemple d'attribut personnalisé de newrelic.yml
custom_attributes: environment: production service: billing team: alpha-teamConseil
Si les données ne sont pas bien organisées ou sont devenues obsolètes de quelque façon que ce soit, vous devriez envisager de les rationaliser.
Les moteurs de la croissance
- Nombre de moniteurs
podsetcontainers - Fréquence et nombre de métriques d'état de kube collectées
- Logs généré par cluster
Les systèmes complexes et décentralisés comme Kubernetes ont le potentiel de générer beaucoup de télémétrie en peu de temps. Il existe quelques bonnes approches pour gérer l’ingestion de données dans Kubernetes. Ceux-ci seront très simples si vous utilisez l'observabilité comme code dans votre déploiement K8s.
Nous vous recommandons vivement d'installer ce Kubernetes d'analyse d'ingestion de données dashboard avant de prendre toute décision concernant la réduction de l'ingestion. Pour obtenir ce dashboard, consultez le quickstart de l'intégration de l'infrastructure.
Intervalle de grattage
En fonction de vos objectifs d'observabilité, vous pouvez envisager d'ajuster l'intervalle de grattage, qui a une durée par défaut de 15 secondes. L'explorateur de cluster Kubernetes ne s'actualise que toutes les 45 s. Si votre utilisation principale des données Kubernetes est de prendre en charge les visualisations KCE, vous pouvez envisager de modifier votre intervalle de scraping à 20 s. Passer de 15 à 20 ans peut avoir un impact considérable.
Pour plus de détails sur la gestion de cela, consultez notre documentation sur l'intervalle de scraping de l'intégration Helm.
Filtrage de l'espace de nommage
L'intégration Kubernetes version 3 et supérieure permet de filtrer les espaces de nommage récupérés en les étiquetant. Par défaut, tous les espaces de nommage sont scrapés.
Nous utilisons le namespaceSelector de la même manière que Kubernetes. Pour inclure uniquement l'espace de nommage correspondant à une étiquette, modifiez le namespaceSelector en ajoutant ce qui suit à votre values-newrelic.yaml, sous la section newrelic-infrastructure :
common: config: namespaceSelector: matchLabels: key1 : "value1"Dans cet exemple, seul l'espace de nommage avec l'étiquette newrelic.com/scrape définie sur true sera récupéré :
global: licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_ cluster: _K8S_CLUSTER_NAME_
# ... Other settings as shown above
# Configuration for newrelic-infrastructurenewrelic-infrastructure: # ... Other settings as shown above common: config: namespaceSelector: matchLabels: newrelic.com/scrape: "true"Vous pouvez également utiliser des expressions de correspondance Kubernetes pour inclure ou exclure l'espace de nommage. Les opérateurs valides sont :
- Dans
- Pas dans
- Existe
- N'existe pas
La structure générale de la section matchExpressions est constituée d'une ou plusieurs des lignes suivantes :
{key: VALUE, operator: OPERATOR, values: LIST_OF_VALUES}Voici un exemple complet :
common: config: namespaceSelector: matchExpressions: - {key: newrelic.com/scrape, operator: NotIn, values: ["false"]}Conseil
Vous pouvez inclure plusieurs lignes dans la section matchExpresions et les expressions sont concaténées. Tout doit être vrai pour que le filtre soit appliqué. Les étiquettes et les expressions de correspondance sont expliquées plus en détail ici.
Dans cet exemple, l'espace de nommage avec l'étiquette newrelic.com/scrape définie sur false sera exclu :
global: licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_ cluster: _K8S_CLUSTER_NAME_
# ... Other settings as shown above
# Configuration for newrelic-infrastructurenewrelic-infrastructure: # ... Other settings as shown above common: config: namespaceSelector: matchExpressions: - {key: newrelic.com/scrape, operator: NotIn, values: ["false"]}Consultez la liste complète des paramètres que vous pouvez définir dans le fichier README du graphique.
Comment puis-je savoir quels espaces de nommage sont exclus ? [#excluded-namespaces]
Tous les espaces de nommage au sein du cluster sont répertoriés grâce à l'échantillon K8sNamespace. L'attribut nrFiltered détermine si les données relatives à l'espace de nommage vont être récupérées.
Utilisez cette requête pour savoir quels espaces de nommage sont monitorés :
FROM K8sNamespaceSample SELECT displayName, nrFilteredWHERE clusterName = INSERT_NAME_OF_CLUSTER SINCE2 MINUTES AGOQuelles données sont supprimées de l’espace de nommage exclu ? [#namespaces-discarded-data]
Les échantillons suivants ne seront pas disponibles pour l'espace de nommage exclu :
K8sContainerSampleK8sDaemonsetSampleK8sDeploymentSampleK8sEndpointSampleK8sHpaSampleK8sPodSampleK8sReplicasetSampleK8sServiceSampleK8sStatefulsetSampleK8sVolumeSample
Métriques d'état de Kubernetes
L'explorateur cluster Kubernetes ne nécessite que les métriques d'état Kube (KSM) suivantes :
- données du conteneur
- Données Cluster
- Données du nœud
- Données du pod
- Données de volume
- Données du serveur API1
- Données du responsable du traitement1
- Données ETCD1
- Données du planificateur1
1 Non collecté dans un environnement Kubernetes géré (EKS, GKE, AKS, etc.)
Vous pouvez envisager de désactiver certains des éléments suivants :
- Données DaemonSet
- Données de déploiement
- données de point de terminaison
- espace de données de nommage
- Données du ReplicaSet2
- Données de service
- Données StatefulSet
2 Utilisé dans l'alerte par défaut : « Le ReplicaSet n'a pas la quantité souhaitée de pod »
Exemple de mise à jour des métriques d'état dans le manifeste (déploiement)
$[spec]$ [template]$ [spec]$ [containers]$ [name=kube-state-metrics]$ [args]$ #- --collectors=daemonsets$ #- --collectors=deployments$ #- --collectors=endpoints$ #- --collectors=namespaces$ #- --collectors=replicasets$ #- --collectors=services$ #- --collectors=statefulsetsExemple de mise à jour des métriques d'état dans le manifeste (ClusterRole)
$[rules]$# - apiGroups: ["extensions", "apps"]$# resources:$# - daemonsets$# verbs: ["list", "watch"]$
$# - apiGroups: ["extensions", "apps"]$# resources:$# - deployments$# verbs: ["list", "watch"]$
$# - apiGroups: [""]$# resources:$# - endpoints$# verbs: ["list", "watch"]$
$# - apiGroups: [""]$# resources:$# - namespaces$# verbs: ["list", "watch"]$
$# - apiGroups: ["extensions", "apps"]$# resources:$# - replicasets$# verbs: ["list", "watch"]$
$# - apiGroups: [""]$# resources:$# - services$# verbs: ["list", "watch"]$
$# - apiGroups: ["apps"]$# resources:$# - statefulsets$# verbs: ["list", "watch"]Configurer lowDataMode dans le graphique nri-bundle
Nos cartes Helm prennent en charge l'option permettant de réduire la quantité de données ingérées au prix de la suppression d'informations détaillées. Pour l'activer, définissez global.lowDataMode sur true dans le graphique nri-bundle .
lowDataMode affecte trois composants spécifiques du graphique nri-bundle :
- Augmentez l’intervalle de l’agent d’infrastructure de
15à30secondes. - L'intégration de Prometheus OpenMetrics exclura quelques métriques comme indiqué dans la documentation Helm ci-dessous.
- Les détails des étiquettes et des annotations seront supprimés des logs.
Vous pouvez trouver plus de détails sur cette configuration dans notre documentation Helm.
Les intégrations sur hôte de New Relic représentent un ensemble diversifié d'intégrations pour des services tiers tels que Postgresql, MySQL, Kafka, RabbitMQ, etc. Il est impossible de fournir toutes les techniques d'optimisation dans le cadre de ce document, mais ces techniques s'appliquent généralement :
Gérer le taux d'échantillonnage
Gérer les parties de la configuration qui peuvent augmenter ou diminuer l'étendue de la collection
Gérer les parties de la configuration qui permettent des requêtes personnalisées
Gérez l'attribut personnalisé des agents infrastructure à appliquer à toutes les données d'intégration sur hôte.
Nous utiliserons quelques exemples pour le démontrer.
Intégration PostgreSQL
Les moteurs de la croissance
- Nombre de tables monitorées
- Nombre d'indices monitorés
La configuration de l'intégration PostgreSQL sur l'hôte fournit ces paramètres réglables qui peuvent aider à gérer le volume de données :
interval: La valeur par défaut est 15 sCOLLECTION_LIST: liste des tables à monitorer (utilisez ALL pour monitorer TOUTES)COLLECT_DB_LOCK_METRICS: CollecterdblockmétriquesPGBOUNCER: CollecterpgbouncermétriquesCOLLECT_BLOAT_METRICS: Collecter les métriques de gonflementMETRICS: Définissez surtruepour collecter uniquement les métriquesINVENTORY: Définissez surtruepour activer uniquement la collecte d'inventaireCUSTOM_METRICS_CONFIG:Fichier de configuration contenant une requête de collection personnaliséeSample config:
integrations:- name: nri-postgresqlenv:USERNAME: postgresPASSWORD: passHOSTNAME: psql-sample.localnetPORT: 6432DATABASE: postgresCOLLECT_DB_LOCK_METRICS: falseCOLLECTION_LIST: '{"postgres":{"public":{"pg_table1":["pg_index1","pg_index2"],"pg_table2":[]}}}'TIMEOUT: 10interval: 15slabels:env: productionrole: postgresqlinventory_source: config/postgresqlIntégration de Kafka
Les moteurs de la croissance
- Nombre de courtiers dans le cluster
- Nombre de sujets dans le cluster
La configuration de l'intégration Kafka sur l'hôte fournit ces paramètres réglables qui peuvent aider à gérer le volume de données :
interval: La valeur par défaut est 15 sTOPIC_MODE:Détermine le nombre de sujets que nous collectons. Les options sontall,none,listouregex.METRICS: Définissez surtruepour collecter uniquement les métriquesINVENTORY: Définissez surtruepour activer uniquement la collecte d'inventaireTOPIC_LIST: Éventail JSON de noms de sujets à monitorer. Uniquement en vigueur si topic_mode est défini sur liste.COLLECT_TOPIC_SIZE: Collectez la taille du sujet métrique. Les options sonttrueoufalse, la valeur par défaut estfalse.COLLECT_TOPIC_OFFSET:Collectez le décalage du sujet métrique. Les options sonttrueoufalse, la valeur par défaut estfalse.La collecte de mesures au niveau du sujet, en particulier les décalages, peut nécessiter beaucoup de ressources et peut avoir un impact sur le volume de données. L'ingestion d'un cluster peut augmenter d'un ordre de grandeur simplement par l'ajout de nouvelles rubriques Kafka au cluster.
Intégration de MongoDB
Les moteurs de la croissance
- Nombre de bases de données monitorées
L'intégration MongoDB fournit ces paramètres réglables qui peuvent aider à gérer le volume de données :
interval: La valeur par défaut est 15 sMETRICS: Définissez surtruepour collecter uniquement les métriquesINVENTORY: Définissez surtruepour activer uniquement la collecte d'inventaireFILTERS: Une cartographie JSON des noms de base de données vers un éventail de noms de collections. Si vide, la valeur par défaut est toutes les bases de données et collections.Pour toute intégration sur hôte que vous utilisez, il est important de connaître les paramètres tels que
FILTERS, où la valeur par défaut est de collecter les métriques de toutes les bases de données. Il s’agit d’un domaine dans lequel vous pouvez utiliser vos priorités monitoring pour rationaliser les données collectées.Example configuration with different intervals for METRIC and INVENTORY:
integrations:- name: nri-mongodbenv:METRICS: trueCLUSTER_NAME: my_clusterHOST: localhostPORT: 27017USERNAME: mongodb_userPASSWORD: mongodb_passwordinterval: 15slabels:environment: production- name: nri-mongodbenv:INVENTORY: trueCLUSTER_NAME: my_clusterHOST: localhostPORT: 27017USERNAME: mongodb_userPASSWORD: mongodb_passwordinterval: 60slabels:environment: productioninventory_source: config/mongodbIntégration Elasticsearch
Les moteurs de la croissance
- Nombre de nœuds dans le cluster
- Nombre d'indices dans le cluster
L'intégration Elasticsearch fournit ces paramètres réglables qui peuvent aider à gérer le volume de données :
interval: La valeur par défaut est 15 sMETRICS: Définissez surtruepour collecter uniquement les métriquesINVENTORY: Définissez surtruepour activer uniquement la collecte d'inventaireCOLLECT_INDICES: Indique s'il faut collecter ou non les métriques d'index.COLLECT_PRIMARIES:Indique s'il faut collecter ou non des métriques primaires.INDICES_REGEX: Filtrez les indices collectés.MASTER_ONLY:Collectez les métriques de cluster sur le maître élu uniquement.Example configuration with different intervals for
METRICSandINVENTORY:integrations:- name: nri-elasticsearchenv:METRICS: trueHOSTNAME: localhostPORT: 9200USERNAME: elasticsearch_userPASSWORD: elasticsearch_passwordREMOTE_MONITORING: trueinterval: 15slabels:environment: production- name: nri-elasticsearchenv:INVENTORY: trueHOSTNAME: localhostPORT: 9200USERNAME: elasticsearch_userPASSWORD: elasticsearch_passwordCONFIG_PATH: /etc/elasticsearch/elasticsearch.ymlinterval: 60slabels:environment: productioninventory_source: config/elasticsearchIntégration JMX
Les moteurs de la croissance
- Métriques répertoriées dans
COLLECTION_CONFIG
L'intégration JMX est intrinsèquement générique. Il vous permet d'extraire des métriques de n'importe quelle instance JMX. Vous avez le contrôle sur ce qui est collecté par cette intégration. Dans certaines entreprises, les métriques JMX des environnements New Relic représentent une proportion relativement élevée de toutes les données collectées.
L'intégration JMX fournit ces paramètres réglables qui peuvent aider à gérer le volume de données :
- Métriques répertoriées dans
interval: La valeur par défaut est 15 sMETRICS: Définissez surtruepour collecter uniquement les métriquesINVENTORY: Définissez surtruepour activer uniquement la collecte d'inventaireMETRIC_LIMIT:Nombre de métriques pouvant être collectées par entité. Si cette limite est dépassée, l'entité ne sera pas signalée. Une limite de 0 implique aucune limite.LOCAL_ENTITY:Collectez toutes les métriques sur l’entité locale. Utilisé uniquement lors de monitoring de localhost.COLLECTION_FILES:Une liste séparée par des virgules des chemins d'accès complets aux fichiers de définition de la collection métrique. Pour l'installation sur l'hôte, le fichier de collecte de métriques JVM par défaut se trouve à/etc/newrelic-infra/integrations.d/jvm-metrics.yml.COLLECTION_CONFIG: configuration de la collection métriques en JSON.Ce sont les entrées
COLLECTION_CONFIGqui régissent le plus la quantité de données ingérées. Comprendre le modèle JMX que vous récupérez vous aidera à l'optimiser.COLLECTION_CONFIGexemple pour les métriques JVMCOLLECTION_CONFIG='{"collect":[{"domain":"java.lang","event_type":"JVMSample","beans":[{"query":"type=GarbageCollector,name=*","attributes":["CollectionCount","CollectionTime"]},{"query":"type=Memory","attributes":["HeapMemoryUsage.Committed","HeapMemoryUsage.Init","HeapMemoryUsage.Max","HeapMemoryUsage.Used","NonHeapMemoryUsage.Committed","NonHeapMemoryUsage.Init","NonHeapMemoryUsage.Max","NonHeapMemoryUsage.Used"]},{"query":"type=Threading","attributes":["ThreadCount","TotalStartedThreadCount"]},{"query":"type=ClassLoading","attributes":["LoadedClassCount"]},{"query":"type=Compilation","attributes":["TotalCompilationTime"]}]}]}'L’omission d’une entrée de cette configuration, telle que
NonHeapMemoryUsage.Init, aura un impact tangible sur le volume global de données collectées.COLLECTION_CONFIGexemple pour les métriques TomcatCOLLECTION_CONFIG={"collect":[{"domain":"Catalina","event_type":"TomcatSample","beans":[{"query":"type=UtilityExecutor","attributes":["completedTaskCount"]}]}]}Autre intégration sur hôte
Il existe de nombreuses autres intégrations sur hôte avec des options configuration qui vous aideront à optimiser la collecte. Certains des plus couramment utilisés sont :
C'est un bon point de départ pour en savoir plus.
Les moteurs de la croissance
Dispositifs monitorés pilotés par :
- appareils configurés de manière rigide
- Portée du CIDR dans la section découverte
- pièges configurés
Cette section se concentre sur monitoring des performances du réseau de New Relic qui s'appuie sur l'agent ktranslate de Kentik. Cet agent est assez sophistiqué et il est important de bien comprendre les documents de configuration avancés avant de procéder à des efforts d'optimisation majeurs. Les options de configuration incluent :
mibs_enabled: éventail de tous les MIB actifs que l'image docker KTranslate va interroger. Cette liste est générée automatiquement lors de la découverte si l'attributdiscovery_add_mibsesttrue. Les MIB non répertoriés ici ne seront interrogés sur aucun périphérique dans le fichier de configuration. Vous pouvez spécifier une table SNMP directement dans un fichier MIB en utilisant la syntaxeMIB-NAME.tableName. Ex :HOST-RESOURCES-MIB.hrProcessorTable.user_tags: valeur clé paire d'attributs pour donner plus de contexte à l'appareil. La balise à ce niveau sera appliquée à tous les périphériques du fichier configuration .devices: Section répertoriant les appareils à monitorer pour le débittraps: configure l'IP et les ports à monitorer avec des interruptions SNMP (la valeur par défaut est127.0.0.1:1162)discovery: configure la manière dont le point de terminaison peut être découvert. Dans cette section, les paramètres suivants contribueront le plus à augmenter ou à diminuer la portée :cidrs: éventail de plages d'adresses IP cibles en notation CIDR.ports: éventail de ports cibles à analyser lors de l'interrogation SNMP.debug: Indique s'il faut activer le logging au niveau de débogage pendant la découverte. Par défaut, il est défini surfalsedefault_communities: éventail de chaînes de communauté SNMPv1/v2c à analyser pendant l'interrogation SNMP. Cet éventail est évalué dans l'ordre et la découverte accepte la première communauté passante.
Pour prendre en charge le filtrage des données qui ne créent pas de valeur pour vos besoins d'observabilité, vous pouvez définir la carte d'attributs
global.match_attributes.{}et/oudevices.<deviceName>.match_attributes.{}.Cela fournira un filtrage au niveau de KTranslate, avant d'envoyer des données à New Relic, vous donnant un contrôle précis sur monitoring d'éléments tels que les interfaces.
Pour plus de détails, voir des performances du réseau monitoring configuration.
Les moteurs de la croissance
- Logs transmis
- Taille moyenne des enregistrements log de transfert
Les logs représentent l'une des sources de télémétrie les plus flexibles dans la mesure où nous acheminons généralement les logs via une couche de transfert dédiée avec ses propres règles de routage et de transformation. Comme il existe une grande variété de transitaires, nous nous concentrerons sur les plus couramment utilisés :
Agents linguistiques APM (versions récentes)
Fluentd
Fluentbit
Agent d'infrastructure New Relic ( Fluentbit intégré)
Logstash
Échantillonnage log de l'agent APM
Les versions récentes des agents de langage New Relic peuvent transmettre les logs directement à New Relic. Vous souhaiterez peut-être définir certaines limites quant à l'ampleur des pics de logging de chaque instance d'agent APM.
Vous pouvez activer l'échantillonnage avec la variable d'environnement
NEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STOREDet la configurer en fournissant le nombre maximal de logs que la file d'attente de logging des agents APM stockera. Il fonctionne sur la base d'une file d'attente de priorité personnalisée et donne à tous les messages du log une priorité. les logs qui se produisent dans une transaction obtiennent la priorité de la transaction.La file d'attente des logs est triée en fonction de la priorité et du moment où le log arrive. La priorité la plus élevée passe en premier et, si nécessaire, le log le plus récent a la priorité. Les logs sont ajoutés individuellement à la file d'attente (même ceux d'une transaction), et une fois la limite atteinte, le log à la fin de la file d'attente est poussé vers l'extérieur en faveur du log le plus récent.
Dans la section ressources ci-dessous, il existe un qui vous aide à quickstart dashboard suivre log le volume de manière simple. Le volume log de suivi vous permettra d'ajuster ou de désactiver le taux d'échantillonnage en fonction de vos besoins d'observabilité.
Configuration des filtres dans Fluentd ou Fluentbit
La plupart des transitaires généraux fournissent un workflowde routage assez complet qui inclut le filtrage et la transformation. Notre agent infrastructure fournit des modèles très simples pour filtrer les logs indésirables.
expressions régulières pour filtrer les enregistrements. Uniquement pris en charge pour les sources
tail,systemd,syslogettcp(uniquement avec le formatnone). Ce champ fonctionne de manière similaire àgrep -Edans le système Unix. Par exemple, pour un fichier donné en cours de capture, vous pouvez filtrer les enregistrements contenant soitWARNsoitERRORen utilisant :- name: only-records-with-warn-and-errorfile: /var/log/logFile.logpattern: WARN|ERRORSi vous avez une configuration Fluentd pré-écrite pour Fluentbit qui effectue un filtrage ou une analyse précieuse, vous pouvez les importer dans notre configuration de logging. Pour ce faire, utilisez les paramètres
config_fileetparsersdans n'importe quel fichier.yamlde votre dossierlogging.d:config_file: chemin vers un fichier de configuration Fluent Bit existant. Tout chevauchement de source entraîne des messages en double dans de New Relic.parsers_file: chemin vers un fichier d'analyse Fluent Bit existant.Les noms d’analyseurs suivants sont réservés :
rfc3164,rfc3164-localetrfc5424.Apprendre à injecter un attribut ou une balise dans vos logs dans votre pipeline de données et à effectuer des transformations peut vous aider à supprimer les fonctionnalités en aval à l'aide des règles de suppression New Relic. En augmentant vos logs avec des métadonnées sur la source, nous pouvons prendre des décisions centralisées et réversibles sur ce qu'il faut déposer sur le backend. Au minimum, assurez-vous que les attributs suivants sont présents dans vos logs sous une forme ou une autre :
Équipe
Environnement (développement/stage/production)
Application
centre de données
niveau de log
Vous trouverez ci-dessous quelques ressources détaillées de routage et de filtrage :
Transfert des logs avec l'agent New Relic Infrastructure
Ajuster l'ensemble d'attributs par défaut de l'agent infrastructure
L'agent infrastructure ajoute certains attributs par défaut, y compris toute balise personnalisée ajoutée à l'hôte. Il est possible que votre configuration en intègre bien plus, y compris un grand nombre de balises AWS, qui apparaissent dans New Relic sous la forme
aws.[attributename]. Ces attributs sont importants, il est donc fortement recommandé d'évaluer vos besoins en matière de visualisation, d'analyse et d'alerte par rapport aux modifications configuration prévues. Par exemple, les logs d'un cluster Kubernetes ne seront probablement pas utiles sans métadonnées telles que :cluster_namepod_namecontainer_namenode_name
Les moteurs de la croissance
- Nombre de métriques exportées à partir des applications
- Nombre de métriques transférées via l'écriture à distance ou POMI
New Relic fournit deux options principales pour envoyer des métriques Prometheus à New Relic. Les bonnes pratiques pour la gestion de l'ingestion métrique se concentrent principalement sur la deuxième option - l'intégration Prometheus OpenMetrics (POMI) - car ce composant a été créé par New Relic.
Option 1 : Intégration de l'écriture à distancePrometheus
Pour les options de configuration du scraping du serveur Prometheus, consultez la documentation de configuration de Prometheus. Ces configurations de scraping déterminent quelles métriques sont collectées par le serveur Prometheus. En configurant le paramètre remote_write , vous pouvez écrire les métriques collectées dans la base de données New Relic (NRDB) via l'API métrique New Relic.
Option 2 : intégration dePrometheus OpenMetrics (POMI)
POMI est une intégration autonome qui récupère les métriques des points de terminaison Prometheus découverts dynamiquement et statiques. POMI envoie ensuite ces données à NRDB via l'API métrique New Relic. Cette intégration est idéale pour les clients qui n'utilisent pas actuellement le serveur Prometheus.
POMI : gratter l'étiquette
POMI découvrira tout point de terminaison Prometheus contenant l'étiquette ou l'annotation prometheus.io/scrape=true par défaut. Cela peut être un grand nombre de points de terminaison et donc, un grand nombre de métriques ingérées, en fonction de ce qui est déployé dans le cluster.
Il est suggéré de modifier le paramètre scrape_enabled_label en quelque chose de personnalisé (par exemple newrelic/scrape) et que vous étiquetiez de manière sélective le point de terminaison Prometheus lorsque l'ingestion de données est de la plus haute importance.
Pour la dernière configuration de référence, voir nri-prometheus-latest.yaml.
POMI config parameter:
# Label used to identify scrapable targets. # Defaults to "prometheus.io/scrape" scrape_enabled_label: "prometheus.io/scrape"POMI découvrira tout point de terminaison Prometheus exposé au niveau du nœud par défaut. Cela inclut généralement des métriques provenant de Kubelet et de cAdvisor. Si vous exécutez le Daemonset New Relic Kubernetes, il est important de définir require_scrape_enabled_label_for_nodes: true afin que POMI ne collecte pas de métriques en double.
Pour le point de terminaison cible du Daemonset New Relic Kubernetes , consultez notre Kubernetes README sur GitHub.
POMI : étiquette de scraping pour les nœuds
POMI découvrira tout point de terminaison Prometheus exposé au niveau du nœud par défaut. Cela inclut généralement des métriques provenant de Kubelet et de cAdvisor. Si vous exécutez le Daemonset New Relic Kubernetes, il est important de définir require_scrape_enabled_label_for_nodes: true afin que POMI ne collecte pas de métriques en double.
Pour le point de terminaison cible du Daemonset New Relic Kubernetes , consultez notre Kubernetes README sur GitHub.
Paramètres de configuration POMI
# Whether k8s nodes need to be labeled to be scraped or not. # Defaults to false. require_scrape_enabled_label_for_nodes: falsePOMI : coexister avec nri-kubernetes
L'intégration Kubernetes de New Relic collecte un certain nombre de mesures prêtes à l'emploi. Cependant, il ne collecte pas toutes les métriques possibles disponibles à partir d'un cluster Kubernetes.
Dans la configuration POMI, vous verrez une section similaire à celle-ci qui collectera disable métriques pour un sous-ensemble de métriques que l'intégration New Relic Kubernetes collecte déjà à partir de Kube State Metrics.
Il est également très important de définir require_scrape_enabled_label_for_node: true afin que les métriques Kubelet et cAdvisor ne soient pas dupliquées.
POMI config parameters:
transformations: - description: "Uncomment if running New Relic Kubernetes integration" ignore_metrics: - prefixes: - kube_daemonset_ - kube_deployment_ - kube_endpoint_ - kube_namespace_ - kube_node_ - kube_persistentvolume_ - kube_persistentvolumeclaim_ - kube_pod_ - kube_replicaset_ - kube_service_ - kube_statefulset_POMI : paramètres de demande/limite
Lors de l'exécution de POMI, il est recommandé d'appliquer les limites de ressources suivantes pour un cluster générant environ 500 000 DPM :
- Limite du processeur : 1 cœur (1000 m)
- Limite de mémoire : 1 Go 1024 (1 Go)
Vous devez définir la demande de ressources pour le processeur et la mémoire afin de fournir à POMI suffisamment de ressources du cluster. Régler ceci sur quelque chose d'extrêmement bas (par exemple cpu: 50m) peut entraîner la consommation de ressources de cluster par des « voisins bruyants ».
POMI config parameter:
spec: serviceAccountName: nri-prometheus containers: - name: nri-prometheus image: newrelic/nri-prometheus:2.2.0 resources: requests: memory: 512Mi cpu: 500m limits: memory: 1G cpu: 1000mPOMI : estimation du DPM et de la cardinalité
Bien que la cardinalité ne soit pas directement associée à l'ingestion facturable par Go, New Relic maintient certaines limites de débit sur la cardinalité et les points de données par minute. Être capable de visualiser la cardinalité et le DPM d'un cluster Prometheus peut être très important.
Conseil
Les comptes New Relic ont une limite de DPM et de cardinalité de 1 M, mais vous pouvez demander jusqu'à 15 M de DPM et 15 M de cardinalité. Pour demander des modifications, contactez votre représentant de compte New Relic. Pour plus d'informations, consultez Limites de l'API métrique.
Si vous exécutez déjà Prometheus Server, vous pouvez exécuter des estimations DPM et de cardinalité avant d'activer POMI ou remote_write.
Data points per minute (DPM):
rate(prometheus_tsdb_head_samples_appended_total[10m]) * 60Top 20 metrics (highest cardinality):
topk(20, count by (<DNT>**name**</DNT>, job)({__name__=~".+"}))Les moteurs de la croissance
- Nombre de métriques exportées par intégration
- Fréquence d'interrogation (pour l'intégration basée sur l'interrogation)
Certaines intégrations cloud New Relic obtiennent des données à partir des API des fournisseurs cloud . Avec cette implémentation, les données sont collectées à partir d'API monitoring telles que AWS CloudWatch, Azure Monitor et GCP Stackdriver, et les métadonnées d'inventaire sont collectées à partir des API des services spécifiques.
D'autres cloud d'intégration obtiennent leurs données à partir de métriques en streaming (ou métriques « poussées ») qui sont poussées via un service de streaming tel qu'AWS Kinesis.
Intégration basée sur l'API de sondage
Si vous souhaitez signaler plus ou moins de données de votre cloud d'intégration, ou si vous devez contrôler l'utilisation des API des fournisseurs cloud pour éviter d'atteindre le débit limite et les limites de limitation de votre compte cloud , vous pouvez modifier les paramètres de configuration pour modifier la quantité de données qu'ils signalent. Les deux principaux contrôles sont :
Modifier les données rapportées
Voici quelques exemples de raisons commerciales pour lesquelles vous souhaitez modifier la fréquence de vos sondages :
Billing:Si vous devez gérer votre facture AWS CloudWatch, vous souhaiterez peut-être diminuer la fréquence d'interrogation. Avant de faire cela, assurez-vous que les conditions d'alerte définies pour votre cloud d'intégration ne sont pas affectées par cette réduction.
New services:Si vous déployez un nouveau service ou une nouvelle configuration et que vous souhaitez collecter des données plus souvent, vous souhaiterez peut-être augmenter temporairement la fréquence d'interrogation.
Prudence
La modification des paramètres configuration de votre intégration peut avoir un impact sur l'état d'alerte et les tendances des graphiques.
Pour plus de détails, voir Configurer l'interrogation.
Métriques « streaming » ou « poussées »
De plus en plus cloud d'intégration offrent la possibilité de faire circuler les données via un service de streaming au lieu d'utiliser l'interrogation API, ce qui réduit considérablement la latence. Un problème que certains utilisateurs ont observé est qu'il n'est pas aussi facile de contrôler le volume car vous ne pouvez pas configurer la fréquence d'échantillonnage.
Les règles New Relic pour la suppression des données sont le principal moyen de filtrer les métriques de streaming avec un volume trop élevé. Cependant, il existe certaines choses que vous pouvez faire du côté du fournisseur de cloud pour aider à limiter le volume de flux.
Par exemple, dans AWS, il est possible d'utiliser des clés de condition pour limiter l'accès à l'espace de nommage CloudWatch.
La politique suivante limite l'utilisateur à publier des métriques uniquement dans l'espace de nommage nommé
MyCustomNamespace:{"Version": "2012-10-17","Statement": {"Effect": "Allow","Resource": "*","Action": "cloudwatch:PutMetricData","Condition": {"StringEquals": {"cloudwatch:namespace": "MyCustomNamespace"}}}}La politique suivante permet à l'utilisateur de publier des métriques dans n'importe quel espace de nommage à l'exception de
CustomNamespace2:{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Resource": "*","Action": "cloudwatch:PutMetricData"},{"Effect": "Deny","Resource": "*","Action": "cloudwatch:PutMetricData","Condition": {"StringEquals": {"cloudwatch:namespace": "CustomNamespace2"}}}]}
Optimiser avec des règles de dépôt
Une règle simple pour comprendre ce que vous pouvez faire avec les règles de dépôt est : If you can query it you can drop it. Les règles de filtrage de dépôt vous aident à atteindre plusieurs objectifs importants :
- Réduisez les coûts en stockant uniquement le log correspondant à votre compte.
- Protégez la confidentialité et la sécurité en supprimant les informations personnelles identifiables (PII).
- Réduisez le bruit en supprimant les événements et attributs non pertinents.
Conseil
Lors de la création de règles de suppression, vous êtes responsable de vous assurer que les règles identifient et suppriment avec précision les données qui répondent aux conditions que vous avez établies. Vous êtes également responsable de monitoring de la règle, ainsi que des données que vous divulguez à New Relic. Testez et retestez toujours votre requête et, après avoir installé la règle de suppression, assurez-vous qu'elle fonctionne comme prévu. La création d'un dashboard pour monitorer vos données avant et après le dépôt vous aidera.
Voici quelques conseils sur l'utilisation des règles de suppression pour optimiser l'ingestion de données pour des outils spécifiques :
Toutes les règles de dépôt de New Relic sont implémentées par le même modèle de données backend et la même API. Notre gestion des logs fournit une interface utilisateur puissante qui facilite grandement la création et le monitoring des règles de dépôt.
Précédemment dans cette série de didacticiels, nous avons abordé la priorisation de la télémétrie en exécutant quelques exercices pour montrer comment nous pourrions déprécier certaines données. Reprenons cet exemple :
Omit debug logs (knowing they can be turned on if there is an issue) (saves 5%)Méthode 1 : UI des logs
- Identifiez les logs qui nous intéressent à l’aide d’un filtre dans l’interface utilisateur des logs :
level: DEBUG. - Assurez-vous qu'il trouve les logs que nous voulons supprimer.
- Vérifiez quelques syntaxes alternatives telles que
level:debugetlog_level:Debug. Ces variations sont courantes. - Sous Manage data, cliquez sur Drop filters, puis créez et activez un filtre nommé « Supprimer les logs de débogage ».
- Vérifiez que la règle fonctionne.
Méthode 2 : Notre API NerdGraph
- Créez la requête NRQL pertinente :SELECT count(*) FROM Log WHERE `level` = 'DEBUG'
- Assurez-vous qu'il trouve les logs que vous souhaitez supprimer.
- Vérifiez les variations sur le nom et la valeur de l'attribut (
DebugvsDEBUG). - Exécutez l’instruction NerdGraph suivante et assurez-vous qu’elle fonctionne :
mutation { nrqlDropRulesCreate( accountId: YOUR_ACCOUNT_ID rules: [ { action: DROP_DATA nrql: "SELECT * FROM Log WHERE `level` = 'DEBUG'" description: "Drops DEBUG logs. Disable if needed for troubleshooting." } ] ) { successes { id } failures { submitted { nrql } error { reason description } } }}Implémentons la recommandation : Drop process sample data in DEV environments.
Créez la requête pertinente :
SELECT * FROM ProcessSample WHERE `env` = 'DEV'Assurez-vous qu’il trouve les échantillons de processus que nous voulons supprimer.
Recherchez d’autres variantes de
envtelles queENVetEnvironment.Vérifiez différents types de
DEVtels queDevetDevelopment.Utilisez notre API NerdGraph pour exécuter l’instruction suivante et vous assurer qu’elle fonctionne :
mutation {nrqlDropRulesCreate(accountId: YOUR_ACCOUNT_IDrules: [{action: DROP_DATAnrql: "SELECT * FROM ProcessSample WHERE `env` = 'DEV'"description: "Drops ProcessSample from development environments"}]) {successes {id}failures {submitted {nrql}error {reasondescription}}}}
Vous pouvez souvent réduire votre consommation de données en réduisant les données avec une couverture redondante. Par exemple : dans un environnement où l'intégration AWS RDS est en cours d'exécution ainsi que l'une des intégrations New Relic sur l'hôte qui monitore la base de données SQL telle que nri-mysql ou nri-postgresql, vous pourrez peut-être ignorer certaines métriques qui se chevauchent.
Par exemple, vous pouvez exécuter une requête comme celle-ci :
FROM Metric select count(*) where metricName like 'aws.rds%' facet metricName limit maxCela affichera toutes les valeurs metricName correspondant au modèle.
Vous pouvez voir à partir des résultats qu'il existe un volume élevé de métriques du modèle aws.rds.cpu%. Vous pouvez les abandonner car vous avez d'autres instruments pour ceux-là :
Créez la requête pertinente :
FROM Metric select * where metricName like 'aws.rds.cpu%' facet metricName limit max since 1 day agoAssurez-vous qu'il trouve les échantillons de processus que vous souhaitez supprimer.
Utilisez l'API NerdGraph pour exécuter l'instruction suivante et assurez-vous qu'elle fonctionne :
mutation {nrqlDropRulesCreate(accountId: YOUR_ACCOUNT_IDrules: [{action: DROP_DATAnrql: "FROM Metric select * where metricName like 'aws.rds.cpu%' facet metricName limit max since 1 day ago"description: "Drops rds cpu related metrics"}]) {successes {id}failures {submitted {nrql}error {reasondescription}}}}
Un aspect important des règles de suppression est que vous pouvez configurer une règle qui supprime un attribut spécifique tout en préservant l’intégrité du reste des données. Utilisez ceci pour supprimer des données privées de NRDB ou pour supprimer des attributs excessivement volumineux, tels que des traces d'appels ou de gros morceaux de JSON dans des enregistrements log excessivement volumineux.
Pour définir ces règles de suppression, modifiez le champ action en DROP_ATTRIBUTES au lieu de DROP_DATA.
mutation { nrqlDropRulesCreate( accountId: YOUR_ACCOUNT_ID rules: [ { action: DROP_ATTRIBUTES nrql: "SELECT stack_trace, json_data FROM Log where appName='myApp'" description: "Drops large fields from logs for myApp" } ] ) { successes { id } failures { submitted { nrql } error { reason description } } }}Prudence
Utilisez cette approche avec précaution et uniquement dans les situations où il n’existe pas d’autres options, car elle peut modifier les conclusions tirées de vos données. Cependant, pour les événements avec un échantillon de grande taille, vous pouvez vous contenter d'une partie seulement de vos données, à condition de bien comprendre les conséquences.
Dans cet exemple, vous pouvez tirer parti de la distribution relative de certains identifiants de trace pour approximer l'échantillonnage aléatoire. Vous pouvez utiliser l'opérateur rlike pour vérifier les valeurs principales de l'attribut trace.id d'un span. L'exemple suivant pourrait supprimer environ 25 % des portées :
SELECT * FROM Span WHERE trace.id rlike r'.*[0-3]' and appName = 'myApp'Les expressions utiles incluent :
r'.*0'environ 6,25 %r'.*[0-1]'environ 12,5 %r'.*[0-2]'environ 18,75 %r'.*[0-3]'environ 25,0 %Après avoir épuisé les chiffres, vous pouvez utiliser des lettres, par exemple :
r'.*[a0-9]'environ 68,75 %r'.*[a-b0-9]'environ 75,0 %Voici un exemple de mutation complète :
mutation {nrqlDropRulesCreate(accountId: YOUR_ACCOUNT_IDrules: [{action: DROP_DATAnrql: "SELECT * FROM Span WHERE trace.id rlike r'.*[0-3]' and appName = 'myApp'"description: "Drops approximately 25% of spans for myApp"}]) {successes {id}failures {submitted {nrql}error {reasondescription}}}}Conseil
Étant donné que les
trace.idsont des nombres hexadécimaux, chaque caractère detrace.idest une valeur de0123456789abcdef. Chaque caractère que vous ajoutez au modèleRLIKEcorrespondra à 1/16 supplémentaire des lignes de l'événement span, en supposant que les caractères finaux aient une distribution uniforme. Si vous ajoutez des lettres au-delà de F qui ne sont pas utilisées en hexadécimal, les chiffres ajoutés n'affecteront pas le pourcentage correspondant.
Les exemples précédents devraient vous montrer tout ce que vous devez savoir pour utiliser ces techniques sur tout autre événement ou métrique dans NRDB. N'oubliez pas : si vous pouvez le demander, vous pouvez le supprimer. Contactez-nous si vous avez des questions sur la manière précise de structurer une requête pour une règle de suppression.
Quelle est la prochaine étape ?
L'étape d'optimisation terminée, vous avez terminé le tutoriel d'optimisation des données télémétriques ! Si votre compte dispose d'un responsable de compte, vous pouvez le contacter pour obtenir des conseils supplémentaires sur la marche à suivre et pour vous assurer que vous êtes optimisé.
Si vous êtes nouveau sur la plateforme New Relic, vous pouvez consulter notre autre série de tutoriels pour en savoir plus sur l'optimisation de votre système à l'aide de notre plateforme :