InfluxDB, Grafana, Telegraf를 학습하여 Python 응용 프로그램의 행동을 모니터링

15202 단어 pythondockertutorial
우리는 Python과 Flask를 사용하는 강좌를 배울 것이다.하지만 Python과 Flask가 이곳에서 그리 중요하지 않은 부분이라는 것을 곧 깨닫게 될 것입니다.설정된 성질 (docker compose 파일) 때문에, Docker와 나의 Flask 프로그램을 감시하고 싶은 다른 프로그램으로 교환할 때 아무런 문제가 없을 것입니다.

그럼, 우리는 도대체 여기서 무엇을 합니까?최종 목표는 무엇입니까?



docker compose 파일을 만들고 다음 서비스를 실례화합니다.
  • 자신이 감시하고 싶은 웹 응용 프로그램
  • Telegraf의 실례로 응용 프로그램의 성능과 관련된 각종 지표를 데이터베이스에 전송할 수 있는 도구이다.
  • InfluxDB의 실례로 모든 Telegraf 정보가 들어갈 데이터베이스이자 응용 프로그램에서 자신의 도량을 작성하는 데이터베이스입니다.

  • Grafana, 좋은 대시보드를 만들고 이 모든 정보를 표시하는 데 사용됩니다.
  • Grafana의 프레젠테이션 here을 통해 Grafana의 힘을 알아보기

    Telegraf/InfluxDB 듀오는 곤혹스러울 수 있습니다.Telegraf가 성능(cpu 사용률, 메모리 사용률 등)에 대한 데이터를 InfluxDB에 기록하는 것을 고려할 수 있습니다단, 응용 프로그램 내용과 관련된 일을 기록하고 싶다면, (어떤 단점에 대한 요청, 함수가 몇 번 호출되었는지, 몇 번의 오류가 발생했는지...)애플리케이션에서 InfluxDB에 사전 예방적으로 저장해야 합니다.우리는 기대해 볼 것이다.

    입문


    이 작업을 보다 쉽게 수행하려면 재구매 계약을 복제하거나 Dell이 진행하는 동안 직접 구축할 수 있습니다.
    https://github.com/rubenwap/metrics-stack
    

    항목 설정


    응용 프로그램


    이 작업에 사용할 프로그램을 포함하는 폴더로 이동하거나 클론의repo를 보십시오.중요한 것은 Dockerfile을 실행해야 한다는 것이다. 실행하면 프로그램을 독립적으로 시작할 것이다.
    docker-compose.yaml 파일을 계속 만듭니다.
    version: "3"
    services:
        metricsweb:
            container_name: metricsweb
            build: .
            ports:
            - 5000:5000
            depends_on:
            - influxdb
    
    보시다시피, 우리는 서비스를 추가하는 것부터 시작합니다. 우리의 응용 프로그램입니다.내 예에서, 그것은 Flask 응용 프로그램이어서, 나는 포트 5000을 열었다.이 서비스는 향후 서비스 influxdb에 따라 달라집니다.build 매개변수를 참고하십시오.작업을 수행하려면 같은 디렉토리에 Dockerfile이 있어야 합니다.내 모습은 이렇다.
    FROM python:3.7.4-slim-stretch
    COPY . /app
    WORKDIR /app
    EXPOSE 5000
    RUN pip install -r requirements.txt
    ENTRYPOINT python /app/main.py
    

    그라파나


    Grafana는 소스 분석 및 시각화 솔루션으로 많은 데이터베이스와 호환됩니다.이 예에서는 InfluxDB를 사용합니다. 시간 시퀀스 데이터가 매우 빠르고 최적화되어 있기 때문입니다. 예를 들어 SQL 데이터베이스에서 Grafana를 읽을 수 있습니다.
    자세한 내용은 visit their website으로 문의하십시오.
    이것은 docker-compose에 추가해야 할 관련 비트입니다.
        grafana:
            container_name: grafana
            image: grafana/grafana:latest
            ports:
            - 3000:3000
            volumes:
                - ./grafana/data:/var/lib/grafana
    
    아주 간단해요.Grafana는 웹 응용 프로그램에 포트 3000을 사용합니다.우리는 잠시 후에 이것에 대해 설정할 것이다.

    InfluxDB


    Influx website을 보면 너는 그것의 기능을 이해할 수 있을 것이다.스택에 추가하려면 docker compose 파일에 다음을 추가해야 합니다.
        influxdb:
            container_name: influxdb
            image: influxdb:latest
            ports:
            - 8086:8086
            env_file:
                - 'env.influxdb'
            volumes:
                - ./influxdb/data:/var/lib/influxdb
    
    몇 가지 중요한 일:
  • 데이터를 저장하기 위해 로컬 디렉터리 볼륨을 설치하고 있습니다.따라서 창고를 파괴하고 다시 만들어도 데이터는
  • 오래 유지됩니다.
  • env 파일에서 변수를 읽고 있습니다.그것들을 직접 yaml 파일에 삽입할 수도 있습니다. 이것은 아무런 차이가 없습니다.가장 중요한 변수는 INFLUX_DB입니다. 스택이 상승할 때 생성되는 DB의 이름을 알려 줍니다.이것은 내가 사용하고 있는 파일입니다.
  • INFLUXDB_DATA_ENGINE=tsm1
    INFLUXDB_REPORTING_DISABLED=false
    INFLUX_DB=metrics
    INFLUXDB_USER=admin
    INFLUXDB_ADMIN_ENABLED=true
    

    텔레그래프 회사


    Telegraf는 InfluxDB를 생산하는 동일한 회사에서 생산됩니다.here에 대한 더 많은 정보를 읽을 수 있습니다. 서버 에이전트입니다. 플러그인이 많습니다. InfluxDB에 연결하고 응용 프로그램에 대한 많은 지표를 저장할 수 있습니다. CPU 사용률, 메모리 사용률 등입니다.너는 그것이 검출할 수 있는 것을 충분히 확장할 수 있다.
    이것은 관련 docker 합성 위치입니다.
    telegraf:
            container_name: telegraf
            image: telegraf
            container_name: telegraf
            restart: always
            depends_on:
            - influxdb
            environment:
                HOST_PROC: /rootfs/proc
                HOST_SYS: /rootfs/sys
                HOST_ETC: /rootfs/etc
            volumes:
                - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
                - /var/run/docker.sock:/var/run/docker.sock:ro
                - /sys:/rootfs/sys:ro
                - /proc:/rootfs/proc:ro
                - /etc:/rootfs/etc:ro
    
    우리가 불러온 지속적인 데이터가 있는 볼륨을 제외하고, Telegraf가 프로세스와 시스템에 대한 정보를 어디서 얻을 수 있는지 알려주는 환경 변수도 있습니다.
    볼륨 부분을 작업하려면 로컬 디렉터리에 telegraf.conf 파일을 만들고 설정해야 합니다.Here you can see the contents . 이것은 매우 기본적인 것이니 당연히 개선할 수 있다.
    필요한 전체 docker-compose.yaml은 다음과 같습니다.
    https://github.com/rubenwap/metrics-stack/blob/master/docker-compose.yml

    지표에 코드 추가


    너는 거의 완성했다.만약 우리가 지금 창고를 열면, 모든 것이 잘 될 것입니다. 응용 프로그램이 inflow에 어떤 것도 보내지 않을 뿐만 아니라, 시스템 데이터에만 접근할 수 있습니다.다음과 같은 내용을 추가합니다.main.py 파일이 하나밖에 없는 것을 감안하면 이것은 매우 간단한 Flask 웹 응용 프로그램입니다. 이것이 바로 제가 가지고 있는 것입니다.
    from flask import Flask
    from datetime import datetime
    from influxdb import InfluxDBClient
    
    
    client = InfluxDBClient('influxdb', 8086, 'admin', 'admin', 'metrics')
    app = Flask(__name__)
    
    @app.route("/hello")
    def hello():
        client.write_points([{
            "measurement": "endpoint_request",
            "tags": {
                "endpoint": "/hello",
            },
            "time": datetime.now(),
            "fields": {
                "value": 1
            }
        }])
        return "Hello World!"
    
    
    @app.route("/bye")
    def bye():
        client.write_points([{
            "measurement": "endpoint_request",
            "tags": {
                "endpoint": "/bye",
            },
            "time": datetime.now(),
            "fields": {
                "value": 1
            }
        }])
        return "Bye World!"
    
    if __name__ == "__main__":
        app.run (host="0.0.0.0")
    
    우리가 먼저 적당한 매개 변수로 데이터베이스 클라이언트를 초기화한 다음에 각 단점에서 이 방법을 호출하여 관련 내용을 데이터베이스에 기록하는 방법을 봅시다.포트를 호출할 때마다 "1"을 기록하도록 선택했기 때문에, 나중에 이 필드의 합계를 요청해서 대시보드에서 그것을 가시화할 수 있습니다.이것은 유일한 방법은 아니지만, 단지 한 가지 방법만 있다.

    정상 가동


    dockercompose로 구축


    콘솔에서 이 명령을 실행하여 스택을 올리려면 다음과 같이 하십시오.
    docker-compose up --build
    
    (나중에 다시 말하지만, 새로 만들 내용이 없으면build 인자를 생략하십시오.)
    현재 창고는 상호작용 모드로 실행됩니다. (컨트롤러에서 로그 기록을 볼 수 있습니다.)Ctrl + C를 누르면 멈출 수 있습니다. 단, 이렇게 하면 창고가 완전히 아래로 내려가지 않습니다.그리고 네가 해야 돼.
    docker-compose down
    
    콘솔에서 독립적으로 시작하려면 다음과 같이 하십시오.
    docker-compose up -d
    

    대시보드 구성


    네, 창고가 시작되고 실행되었습니다.접근을 등록하고 데이터베이스에 데이터를 기록할 수 있도록api 노드를 호출합니다.그리고 http://localhost:3000으로 넘어가서 Grafana를 켜주세요.

    Grafana 사용 방법


    로그인(admin/admin) 후 가장 먼저 해야 할 일은 데이터 원본을 추가하는 것입니다.


    dockercompose 파일에 있는 서비스의 이름이기 때문에 influxdb을 호스트 이름으로 설정해야 합니다.그렇지 않으면 내부 Docker IP 주소를 찾기 위해 컨테이너를 확인해야 합니다. 더 복잡합니다. 변경할 수 있기 때문입니다.influxdb을 사용하여 현재 IP를 자동으로 검색하면 문제를 줄일 수 있습니다.
    새 대시보드 생성...

    새 패널을 추가할 준비가 되었습니다.이 예에서 나는 빈 CPU의 비율을 추가할 것이다.나는 Telegraf가 제공한 데이터를 얻었다.이것은 보잘것없는 응용 프로그램이기 때문에, 당신은 이 비율이 매우 크다는 것을 보게 될 것이다. 왜냐하면 나는 이 응용 프로그램에 대해 거의 아무것도 하지 않기 때문이다.

    화면 아래쪽을 클릭하면 쿼리 생성기에서 (이 예에서는 데이터베이스가 하나밖에 없습니다) 를 선택하면 드롭다운 메뉴에서 사용할 수 있는 옵션이 자동으로 채워집니다.
    다른 판넬을 보세요.이것은 접근 횟수가 /hello인 계수기를 만들 것입니다.이 데이터는 우리가 Python 프로그램에 넣은 influxdb 코드에서 나온 것이다
    endpoint_request이 아래 목록에 어떻게 나타나는지 보십시오. 이것은 우리가 코드에서 저장하는 관건이기 때문입니다.그런 다음 데이터를 처리하는 방법을 선택할 수 있습니다.나의 예에서, 나는 계수기의 모든 항목의 총계를 표시한다.
    보시다시피 Grafana는 매우 멋지고 전면적인 도구입니다.나는 당신이 서로 다른 지표에 대해 패널을 구축하는 것을 건의합니다.얘는 정말 강해!
    나는 네가 이 강좌에서 약간의 쓸모를 찾을 수 있기를 바란다.Grafana와 Inflox는 저에게도 새로운 주제이기 때문에 힌트나 댓글이 있으면 알려주세요!

    좋은 웹페이지 즐겨찾기