> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > 애플리케이션 모니터링 및 로그 관리에 Docker를 사용하는 방법

애플리케이션 모니터링 및 로그 관리에 Docker를 사용하는 방법

WBOY
풀어 주다: 2023-11-07 16:58:54
원래의
1097명이 탐색했습니다.

애플리케이션 모니터링 및 로그 관리에 Docker를 사용하는 방법

Docker는 현대 애플리케이션에서 필수적인 기술이 되었지만 애플리케이션 모니터링 및 로그 관리에 Docker를 사용하는 것은 어려운 일입니다. 서비스 검색 및 로드 밸런싱과 같은 Docker 네트워크 기능이 지속적으로 향상됨에 따라 완전하고 안정적이며 효율적인 애플리케이션 모니터링 시스템이 점점 더 필요해지고 있습니다.

이 기사에서는 애플리케이션 모니터링 및 로그 관리를 위한 Docker의 사용을 간략하게 소개하고 구체적인 코드 예제를 제공합니다.

애플리케이션 모니터링을 위해 Prometheus 사용

Prometheus는 SoundCloud에서 개발한 오픈 소스 풀 모델 기반 서비스 모니터링 및 경고 도구입니다. Go 언어로 작성되었으며 마이크로서비스 솔루션 및 클라우드 환경에서 널리 사용됩니다. 모니터링 도구로서 Docker의 CPU, 메모리, 네트워크 및 디스크 등을 모니터링할 수 있으며 다차원 데이터 전환, 유연한 쿼리, 경보 및 시각화 기능도 지원하므로 신속하게 대응하고 신속하게 의사결정을 내릴 수 있습니다.

또 한 가지 주목해야 할 점은 Prometheus가 풀 모드를 통해 샘플링해야 한다는 것입니다. 즉, 모니터링 데이터를 얻으려면 모니터링되는 애플리케이션의 /metrics 인터페이스에 액세스해야 합니다. 따라서 모니터링되는 애플리케이션 이미지를 시작할 때 먼저 Prometheus에 접속할 수 있는 IP와 포트를 /metrics 인터페이스에 구성해야 합니다. 다음은 간단한 Node.js 애플리케이션입니다.

const express = require('express')
const app = express()

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.get('/metrics', (req, res) => {
  res.send(`
    # HELP api_calls_total Total API calls
    # TYPE api_calls_total counter
    api_calls_total 100
  `)
})

app.listen(3000, () => {
  console.log('Example app listening on port 3000!')
})
로그인 후 복사

이 코드에서는 /metrics 인터페이스를 통해 api_calls_total 모니터링 표시기를 반환합니다.

다음으로 공식 홈페이지에서 Prometheus의 Docker 이미지를 다운로드하고 docker-compose.yml 파일을 생성하고, 이 파일에서 Node.js 애플리케이션의 데이터를 얻습니다.

version: '3'
services:
  node:
    image: node:lts
    command: node index.js
    ports:
      - 3000:3000

  prometheus:
    image: prom/prometheus:v2.25.2
    volumes:
      - ./prometheus:/etc/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.retention.time=15d'
    ports:
      - 9090:9090
로그인 후 복사

docker-compose.yml 파일에는 두 가지 서비스를 정의합니다. 하나는 Node.js 애플리케이션을 실행하는 Node 서비스이고 다른 하나는 모니터링을 위한 Prometheus 서비스입니다. 그 중 Node 서비스에서 공개하는 포트는 포트 3000이다. 포트 매핑을 통해 docker-compose.yml의 IP와 3000 포트를 통해 Node 애플리케이션의 /metrics 인터페이스에 접근할 수 있다. Prometheus는 포트 9090을 통해 해당 모니터링 지표 데이터에 액세스할 수 있습니다.

마지막으로 prometheus.yml 파일에서 얻을 데이터 소스를 정의해야 합니다.

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
    - targets: ['node:9100']

  - job_name: 'node-js-app'
    static_configs:
    - targets: ['node:3000']
로그인 후 복사

이 파일에서는 수집할 모든 Node.js 애플리케이션의 표시기를 정의합니다. 여기서 대상 매개변수는 Node.js 애플리케이션의 IP 주소와 해당 포트 번호입니다. 여기서는 노드와 포트 3000을 사용하고 있습니다.

마지막으로 docker-compose up 명령을 실행하여 전체 애플리케이션과 해당 모니터링 서비스를 시작하고 Prometheus에서 멤버 지표를 확인하세요.

로그 관리를 위해 ElasticSearch 및 Logstash 사용

Docker에서 애플리케이션 로그 데이터는 다양한 Docker 컨테이너에 배포됩니다. 이러한 로그를 중앙 집중식으로 관리하려는 경우 ELK의 ElasticSearch 및 Logstash를 사용하여 로그를 중앙에서 관리하면 컴퓨터 리소스를 더 쉽게 모니터링하고 분석할 수 있습니다.

시작하기 전에 Logstash 및 ElasticSearch의 Docker 이미지를 다운로드하고 docker-compose.yml 파일을 생성해야 합니다.

이 파일에는 세 가지 서비스가 정의되어 있으며, 그 중 bls는 비즈니스 로그를 시뮬레이션하는 데 사용되는 API 서비스입니다. 각 응답 후에는 로그가 stdout 및 로그 파일에 기록됩니다. Logstash 서비스는 Logstash에서 공식적으로 제공하는 Docker 이미지를 기반으로 구축되었으며 로그를 수집, 필터링 및 전송하는 데 사용됩니다. ElasticSearch 서비스는 로그를 저장하고 검색하는 데 사용됩니다.

version: '3'
services:
  bls:
    image: nginx:alpine
    volumes:
      - ./log:/var/log/nginx
      - ./public:/usr/share/nginx/html:ro
    ports:
      - "8000:80"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "10"

  logstash:
    image: logstash:7.10.1
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
    environment:
      - "ES_HOST=elasticsearch"
    depends_on:
      - elasticsearch

  elasticsearch:
    image: elasticsearch:7.10.1
    environment:
      - "http.host=0.0.0.0"
      - "discovery.type=single-node"
    volumes:
      - ./elasticsearch:/usr/share/elasticsearch/data
로그인 후 복사

구성 파일에서 컨테이너의 경로를 호스트의 로그 파일 시스템에 매핑합니다. 동시에, 로깅 옵션을 통해 로그의 볼륨 크기와 수량을 정의하여 로그가 차지하는 저장 공간을 제한합니다.

logstash 구성 파일에서 nginx 로그의 수집, 필터링 및 전송을 처리하는 데 사용되는 nginx_pipeline.conf라는 새 파이프라인을 정의합니다. ELK 작동 방식과 유사하게, logstash는 다양한 조건에 따라 수신된 로그를 처리하고 이미 생성된 Elasticsearch 클러스터로 보냅니다. 이 구성 파일에서는 다음 처리 논리를 정의합니다. nginx_pipeline.conf,该文件用于处理nginx日志的收集、过滤和传输。与ELK的工作原理相同,logstash将根据不同的条件,对接收到的日志进行处理,并将其发送到已经创建的 Elasticsearch 集群中。在该配置文件中,我们定义了如下处理逻辑:

input {
  file {
    path => "/var/log/nginx/access.log"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
}

output {
  elasticsearch {
    hosts => [ "${ES_HOST}:9200" ]
    index => "nginx_log_index"
  }
}
로그인 후 복사

在该配置文件中,我们定义了一个name为file的输入,表示要从本地Log文件中读取数据。接着,我们引入了使用grok库来解析符合特定模板的日志的filter。最后,我们定义了输出,其将数据传输到 Elasticsearch 集群的地址,同时将检索和报告通过环境变量ES_HOSTrrreee

이 구성 파일에서는 file이라는 입력을 정의합니다. 이는 로컬 로그 파일에서 데이터를 읽으려는 것을 의미합니다. 다음으로, grok 라이브러리를 사용하여 특정 템플릿과 일치하는 로그를 구문 분석하는 필터를 도입했습니다. 마지막으로 환경 변수 ES_HOST를 통해 컨테이너에 검색 및 보고를 전달하는 동시에 Elasticsearch 클러스터의 주소로 데이터를 전송하는 출력을 정의합니다.

결국 위와 같이 전체 ELK 구성이 완료되면 효율적인 로그 관리 시스템을 얻게 됩니다. 각 로그는 중앙 집중식 장소로 전송되고 통합되어 쉽게 검색, 필터링 및 시각화 작업이 가능합니다. 🎜

위 내용은 애플리케이션 모니터링 및 로그 관리에 Docker를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿