Symfony 및 Graylog로 로그 관리

Symfony로 로깅 - Graylog



Docker 작성 구성



Graylog는 데이터를 저장하고 인덱싱하기 위해 elasticsearch와 mongodb가 필요합니다.
docker-compose 파일을 만들어 보겠습니다.


version: '3.7'

services:
    #[...]

     elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
        environment:
            - node.name=elasticsearch
            - cluster.name=docker-cluster
            - bootstrap.memory_lock=true
            - discovery.type=single-node
            - xpack.security.enabled=false
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
            memlock:
                soft: -1
                hard: -1
        volumes:
            - esdata:/usr/share/elasticsearch/data
        ports:
            - 9200:9200
    mongodb:
        image: "mongo:4.2"
        restart: always

    graylog:
        image: "graylog/graylog:4.3.2"
        depends_on:
            -   elasticsearch
            -   mongodb
        entrypoint: "/usr/bin/tini -- wait-for-it elasticsearch:9200 --  /docker-entrypoint.sh"
        environment:
            GRAYLOG_PASSWORD_SECRET: somepasswordpepper
            # to generate a password hash, type: echo -n admin | shasum -a 256
            GRAYLOG_ROOT_PASSWORD_SHA2: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
            GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9001"
            GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost:9001/"
            GRAYLOG_ELASTICSEARCH_HOSTS: "http://elasticsearch:9200"
            GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog"
        ports:
            - "5044:5044/tcp"   # Beats
            - "5140:5140/udp"   # Syslog
            - "5140:5140/tcp"   # Syslog
            - "5555:5555/tcp"   # RAW TCP
            - "5555:5555/udp"   # RAW TCP
            - "9001:9001/tcp"   # Server API
            - "12201:12201/tcp" # GELF TCP
            - "12201:12201/udp" # GELF UDP
            - "13301:13301/tcp" # Forwarder data
            - "13302:13302/tcp" # Forwarder config
volumes:
    esdata:


프로젝트에 Monolog 설치



Monolog 번들은 Monolog를 Symfony에 통합하며 slack, elasticsearch 및 Graylog와 같은 많은 핸들러와 함께 제공됩니다.

composer require symfony/monolog-bundle


php에 gelf 구현 설치

composer require graylog2/gelf-php


이제/config/packages/dev/monolog.yaml로 이동합니다.

보시다시피 2개의 핸들러가 있습니다.
- "스트림"은 모든 로그를 파일에 씁니다.
- "콘솔"을 사용하면 -vvv 옵션을 사용하여 작업을 실행할 때 터미널에서 로그를 볼 수 있습니다.

이제 새 핸들러를 추가하여 모든 로그를 graylog로 보냅니다.

monolog:
    handlers:
        # [...]
        graylog:
            type: gelf
            publisher:
                hostname: "%env(GRAYLOG_HOST)%"
                port: "%env(GRAYLOG_PORT)%"
            level: debug


그런 다음 이 2개의 새 환경 변수를 .env 파일에 추가합니다.

#[...]
GRAYLOG_HOST=localhost
GRAYLOG_PORT=12201


graylog에서 새 입력 구성



http://localhost:9001/으로 이동한 다음 admin/admin 자격 증명으로 연결합니다.

그런 다음 시스템/입력으로 이동하여 "GELF UDP"를 선택한 다음 시작 입력을 클릭합니다.

테스트



웹사이트로 이동한 다음 graylog 대시보드로 돌아가면 이제 모든 로그를 볼 수 있습니다 :)

좋은 웹페이지 즐겨찾기