Comment envoyer des métriques et des événements personnalisés à datadog avec laravel dans l'environnement docker-compose

Il s'agit d'une méthode pour envoyer des métriques et des événements personnalisés de laravel à datadog via dogstatsd avec datadog-agent, nginx et laravel installés dans l'environnement multi-conteneurs construit avec docker-compose.

La documentation officielle de Datadog est ** comme d'habitude inutilisable **, j'ai donc réussi à créer les paramètres moi-même.

paramètres de composition du menu fixe

Tout d'abord, les paramètres de composition du menu fixe.

(Référence) Cliquez ici pour savoir comment installer et configurer datadog-agent à l'aide de docker-compose https://qiita.com/reopa_sharkun/items/cd4dbfdaa60bcfbefd74

Paramètres du conteneur Laravel

Le point est la mise en place de l'environnement et des liens. Permettre aux liens de communiquer entre le conteneur de Laravel et le conteneur de datadog-agent La destination de la connexion est définie avec les variables d'environnement DD_AGENT_HOST et DD_DOGSTATSD_PORT. (Datadogstatsd décrit plus tard lit et utilise cette variable d'environnement) Définissez DD_ENTITY_ID comme vous le souhaitez.

app:
    build:
      context: ./docker/php
      dockerfile: Dockerfile
    volumes:
      - php-fpm-socket:/var/run/php-fpm
      - ../backend:/work/backend:delegated
      - ./docker/php/bash/.bash_history:/root/.bash_history
      - ./docker/php/bash/psysh:/root/.config/psysh
    environment:
      - DD_AGENT_HOST=dd-agent
      - DD_DOGSTATSD_PORT=8125
      - DD_ENTITY_ID=Laravel
    links:
      - dd-agent:dd-agent

paramètres du conteneur datadog-agent

L'important ici est DD_DOGSTATSD_NON_LOCAL_TRAFFIC = vrai. De plus, il convient de noter Notez que cela ne fonctionnera pas si DD_DOGSTATSD_NON_LOCAL_TRAFFIC = "true" est défini!

dogstatsd écoute sur le port UDP 8215 Ajoutez «8125: 8125 / udp».

Les autres paramètres incluent les paramètres de surveillance de nginx.

  dd-agent:
    container_name: dd-agent
    image: datadog/agent:7
    environment:
      - DD_API_KEY=Écrivez votre clé API ici
      - DD_APM_ENABLED=true
      - DD_LOGS_ENABLED=true
      - DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true
      - DD_AC_EXCLUDE="name:dd-agent"
      - DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - /proc/:/host/proc/:ro
     - /sys/fs/cgroup:/host/sys/fs/cgroup:ro
    ports:
      - "8125:8125/udp"
      - "8126:8126/tcp"

Ce n'est pas grave si vous définissez docker-compose comme ci-dessus. Redémarrons le conteneur.

Ajouter un package à laravel

Ajoutez les deux packages suivants.

"datadog/php-datadogstatsd" "chaseconey/laravel-datadog-helper"

composer require datadog/php-datadogstatsd
composer require chaseconey/laravel-datadog-helper

Contrôle de fonctionnement

Confirmez que le conteneur est correctement démarré avec docker ps. dd-agent écoute à 0.0.0.0:8125-> 8125 / udp.

$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                    PORTS                                            NAMES
0fa807546066        docker-laravel_app   "docker-php-entrypoi…"   35 minutes ago      Up 35 minutes             9000/tcp                                         docker-laravel_app_1
8b970a3b89c3        datadog/agent:7      "/init"                  35 minutes ago      Up 35 minutes (healthy)   0.0.0.0:8125->8125/udp, 0.0.0.0:8126->8126/tcp   dd-agent

Essayez d'envoyer des métriques depuis cli

Essayez d'envoyer depuis l'hôte exécutant Docker. Rien ne s'affiche s'il réussit ou échoue: déçu_relieved:

echo "deploys.test.myservice:1|c" | nc -w 1 -u 127.0.0.1 8125

Envoyer un événement de métriques de Tinker

Encore une fois, je ne vois que null si cela réussit ou échoue: déçu_relieved: Ce n'est que la première fois que de nombreux avis apparaîtront, mais il n'y a pas de problème.

Psy Shell v0.10.4 (PHP 7.4.11 — cli) by Justin Hileman
>>> Datadog::event('An test error occurred.',array( 'text' => 'Test Info message','alert_type' => 'error'));
=> null
>>> Datadog::increment('my.sweet.metrics');
=> null
>>> 

Si vous pouvez l'envoyer avec succès, il sera affiché dans le datadog comme ci-dessous.

スクリーンショット 2020-11-01 13.29.25.png スクリーンショット 2020-11-01 13.28.53.png

Vous pouvez envoyer divers autres journaux, mais si vous le faites jusqu'à présent, je pense que vous pouvez vous en sortir en lisant le document.

URL de référence (document officiel extrêmement hostile)

https://docs.datadoghq.com/ja/developers/dogstatsd/?tab=agent

https://docs.datadoghq.com/ja/developers/events/dogstatsd/?tab=php

Recommended Posts

Comment envoyer des métriques et des événements personnalisés à datadog avec laravel dans l'environnement docker-compose
Comment surveiller nginx avec docker-compose avec datadog
Comment utiliser les fichiers args:, environment:, env_file: et .env avec la commande docker-compose
Que s'est-il passé dans «Java 8 to Java 11» et comment créer un environnement
Comment installer le langage utilisé dans Ubuntu et comment créer l'environnement
Comment déployer sur AWS à l'aide de NUXTJS S3 et CloudFront officiels? Avec docker-compose
Comment exécuter avec des commandes de langage de développement normales dans l'environnement de développement Docker
Comment utiliser les variables d'environnement dans RubyOnRails
Comment créer un environnement Rails 6 avec Docker
Comment installer Titan 2D (v4.2.0) dans un environnement virtuel
Comment créer une API avec GraphQL et Rails
[Rails] Comment créer un environnement avec Docker
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
Comment gérer Selenium :: WebDriver :: Error :: UnknownError qui se produit dans l'environnement Dokcer, etc.
[Explication approximative] Comment séparer le fonctionnement de l'environnement de production et de l'environnement de développement avec Rails
Comment intégrer des variables JavaScript dans HTML avec Thymeleaf
Comment implémenter UICollectionView avec du code uniquement dans Swift
Comment appeler des fonctions en bloc avec la réflexion Java
Comment créer un environnement Java en seulement 3 secondes
Comment envoyer une valeur en HTML sans transition d'écran
Comment basculer Tomcat context.xml avec Eclipse WTP
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
[Environnement Docker] Comment gérer ActiveSupport :: MessageEncryptor :: InvalidMessage
[Comment insérer une vidéo dans un hameau avec Rails]
Comment supprimer des images non balisées en masse avec Docker
Comment sérialiser et désérialiser le type LocalDateTime avec GSON
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment créer un environnement de développement Java avec VS Code
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Comment interroger Array dans jsonb avec Rails + postgres
Comment démarrer par environnement avec Spring Boot de Maven
Comment installer Gradle et Kotlin avec SDKMAN (Mac)
Comment lancer Swagger UI et Swagger Editor dans Docker
Comment développer dans un conteneur avec --privileged et / sbin / init passés dans VSCode Remote Containers
Comment encoder et calculer les bitmaps des ID utilisateur actifs avec des dates différentes dans MaxCompute
Comment gérer la différence dans chaque environnement avec yml sans augmenter le nombre de RAILS_ENV
Comment changer la version Java et l'exécuter dans un environnement où Java ne peut pas être installé librement
Comment écrire docker-compose
Comment créer docker-compose
Comment définir des variables d'environnement lors de l'utilisation de Payjp avec Rails
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
Comment séparer les mots dans les noms dans les classes, les méthodes et les variables
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Express ~
Comment transformer des figurines ARKit et SceneKit avec Metal Shader
Comment obtenir des valeurs en temps réel avec TextWatcher (Android)
[Rails] Comment définir des macros dans Rspec et standardiser le traitement