So senden Sie benutzerdefinierte Metriken und Ereignisse mit Laravel in einer Docker-Compose-Umgebung an Datadog

Dies ist eine Methode zum Senden von benutzerdefinierten Metriken und Ereignissen von Laravel an Datadog über Dogstatsd, wobei Datadog-Agent, Nginx und Laravel in der mit Docker-Compose erstellten Umgebung mit mehreren Containern installiert sind.

Die offizielle Datadog-Dokumentation ist ** wie üblich unbrauchbar **, daher habe ich es geschafft, die Einstellungen selbst zu erstellen.

Docker-Compose-Einstellungen

Zunächst die Docker-Compose-Einstellungen.

(Referenz) Klicken Sie hier, um zu erfahren, wie Sie den Datadog-Agenten mit Docker-Compose installieren und konfigurieren https://qiita.com/reopa_sharkun/items/cd4dbfdaa60bcfbefd74

Laravel-Containereinstellungen

Der Punkt ist die Einstellung der Umgebung und der Links. Ermöglichen Sie Links die Kommunikation zwischen dem Container von Laravel und dem Container des Datadog-Agenten Das Verbindungsziel wird mit den Umgebungsvariablen DD_AGENT_HOST und DD_DOGSTATSD_PORT festgelegt. (Datadogstatsd, das später beschrieben wird, liest und verwendet diese Umgebungsvariable.) Stellen Sie DD_ENTITY_ID wie Sie möchten ein.

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

Einstellungen für den Datadog-Agent-Container

Das Wichtigste hier ist DD_DOGSTATSD_NON_LOCAL_TRAFFIC = true. Darüber hinaus sollte beachtet werden Beachten Sie, dass es nicht funktioniert, wenn DD_DOGSTATSD_NON_LOCAL_TRAFFIC = "true" gesetzt ist!

dogstatsd überwacht den UDP-Port 8215 Fügen Sie "8125: 8125 / udp" hinzu.

Andere Einstellungen umfassen Einstellungen zur Überwachung von Nginx.

  dd-agent:
    container_name: dd-agent
    image: datadog/agent:7
    environment:
      - DD_API_KEY=Schreiben Sie hier Ihren API-Schlüssel
      - 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"

Es ist in Ordnung, wenn Sie Docker-Compose wie oben einstellen. Lassen Sie uns den Container neu starten.

Paket zu Laravel hinzufügen

Fügen Sie die folgenden zwei Pakete hinzu.

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

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

Funktionsprüfung

Stellen Sie sicher, dass der Container mit Docker ps korrekt gestartet wurde. dd-agent hört um 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

Versuchen Sie, Metriken von cli zu senden

Versuchen Sie, vom Host zu senden, auf dem Docker ausgeführt wird. Es wird nichts angezeigt, ob es erfolgreich ist oder fehlschlägt: enttäuscht_relieved:

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

Metrikereignis von Tinker senden

Wieder sehe ich nur null, ob es erfolgreich ist oder fehlschlägt: enttäuscht_relieved: Nur beim ersten Mal werden viele Hinweise angezeigt, aber es gibt kein Problem.

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
>>> 

Wenn Sie es erfolgreich senden können, wird es wie folgt im Datenprotokoll angezeigt.

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

Sie können verschiedene andere Protokolle senden, aber wenn Sie es bisher geschafft haben, können Sie es meiner Meinung nach durch Lesen des Dokuments verwalten.

Referenz-URL (äußerst unfreundliches offizielles Dokument)

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

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

Recommended Posts

So senden Sie benutzerdefinierte Metriken und Ereignisse mit Laravel in einer Docker-Compose-Umgebung an Datadog
So überwachen Sie Nginx mit Docker-Compose mit Datadog
Verwendung der Dateien args :, environment :, env_file: und .env mit dem Befehl docker-compose
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Wie installiere ich die in Ubuntu verwendete Sprache und wie erstelle ich die Umgebung?
Wie kann ich mit NUXTJS Official S3 und CloudFront für AWS bereitstellen? Mit Docker-Compose
Ausführen mit normalen Befehlen für die Entwicklungssprache in der Docker-Entwicklungsumgebung
Verwendung von Umgebungsvariablen in RubyOnRails
So erstellen Sie eine Rails 6-Umgebung mit Docker
So installieren Sie Titan 2D (v4.2.0) in einer virtuellen Umgebung
So erstellen Sie eine API mit GraphQL und Rails
[Rails] So erstellen Sie eine Umgebung mit Docker
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
Umgang mit Selenium :: WebDriver :: Error :: UnknownError, der in einer Dokcer-Umgebung usw. auftritt.
[Grobe Erklärung] So trennen Sie den Betrieb der Produktionsumgebung und der Entwicklungsumgebung mit Rails
Einbetten von JavaScript-Variablen in HTML mit Thymeleaf
So implementieren Sie UICollectionView mit Code nur in Swift
Aufrufen von Funktionen in großen Mengen mit Java Reflection
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
So senden Sie einen Wert in HTML ohne Bildschirmübergang
So wechseln Sie Tomcat context.xml mit Eclipse WTP
Verwendung der Z3-Bibliothek in Scala mit Eclipse
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
[Docker-Umgebung] Umgang mit ActiveSupport :: MessageEncryptor :: InvalidMessage
[So fügen Sie ein Video mit Rails in haml ein]
So löschen Sie mit Docker Bilder ohne Tags in großen Mengen
So serialisieren und deserialisieren Sie den LocalDateTime-Typ mit GSON
Verwendung der JDD-Bibliothek in Scala mit Eclipse
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
Abfragen von Arrays in jsonb mit Rails + postgres
Booten nach Umgebung mit Spring Boot of Maven
So installieren Sie Gradle und Kotlin mit SDKMAN (Mac)
So starten Sie die Swagger-Benutzeroberfläche und den Swagger-Editor in Docker
Entwicklung in einem Container mit --privileged und / sbin / init, der in VSCode Remote Containers übergeben wurde
So codieren und berechnen Sie Bitmaps aktiver Benutzer-IDs mit unterschiedlichen Daten in MaxCompute
So verwalten Sie den Unterschied in jeder Umgebung mit yml, ohne die Anzahl von RAILS_ENV zu erhöhen
So ändern Sie die Java-Version und führen sie in einer Umgebung aus, in der Java nicht frei installiert werden kann
Wie schreibe ich Docker-Compose
So erstellen Sie Docker-Compose
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails
So legen Sie mit JAXB Zeichencode und Zeilenvorschubcode fest
So trennen Sie Wörter in Namen in Klassen, Methoden und Variablen
So erstellen Sie mit Docker ~ Express ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So transformieren Sie ARKit- und SceneKit-Figuren mit Metal Shader
So erhalten Sie Werte in Echtzeit mit TextWatcher (Android)
[Rails] So definieren Sie Makros in Rspec und standardisieren die Verarbeitung