Dockerコンテナでアプリを監視する


写真でIbrahim Boran on Unsplash
私はすでに1つのコンテナをサービスごとに展開し、私のすべてのプロジェクトのためにそれを使用するときに私の流れについてはすでに.それで、速度まで開発プロセスを得るのはより簡単です.
今回はコンテナサービスの接続についてお話します.そして、我々は少し簡単なものから始めますPrometheus and Grafana . そして、その後、それは私たちのためのELK スタック.レッツゴー!🚀

サイドノート


すべてのコード例と設定は私のgithubにありますrepo .

計量


プロメテウスが使用されているかを知らない場合は、サービスから様々なメトリックを収集します.そして、我々が我々の準備をする前にする少しのものGod of Fire 監視するサービスを作成することです.私はそれがほとんどゼロの努力を必要とするので、単純なフラスコアプリであることを選んだ.

フラスコアプリ


クリエイトアflask_app ディレクトリと次の2つのファイルを置く
# flask_app/app.py
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app)
# flask_app/wsgi.py
from app import app
また、requirements.txt 右側の2つの隣に
click==7.1.2
Flask==1.1.2
itsdangerous==1.1.0
Jinja2==2.11.3
MarkupSafe==1.1.1
prometheus-client==0.9.0
prometheus-flask-exporter==0.18.1
Werkzeug==1.0.1
Then create Dockerfile , 同じ場所
FROM python:3.9

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

EXPOSE 8000

RUN apt-get update \
  && apt-get install -y build-essential \
  && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
  && apt-get clean -y && rm -rf /var/lib/apt/lists/* \
  && pip install --upgrade pip

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

ENTRYPOINT ["gunicorn", "wsgi:app", "--bind", "0.0.0.0:8000"]
それはまったく口がきけないことですが、
  • Python 3.9からのイメージの作成;
  • ポート8000を開きます.
  • すべて更新
  • そして、我々の偉大なアプリをインストールします.
  • 今すぐビルド!
    docker build . -t flask_app
    
    そして今我々は実行!
    docker run -d -p 8000:8000 flask_app --name flask_app
    
    http://0.0.0.0:8000/metrics 我々は、ものの束を見ることができます!1💪

    プロメテウス


    メーターを始める時間です.私のお気に入りのツールを開いてコンテナを管理する-Portainer . まず、ボリュームを作成します.2巻.あなたが私の前の記事を読んだならば、あなたはそれがどのように行くかについてわかっています.しかし、あなたがそうしなかった場合タブに移動し、その青い“ボリュームを追加”ボタンを押します.第1巻はプロメテウスのデータに使用されます.それで、名前を挙げましょうprometheus_data . 番目はprometheus設定のために使われます、したがって、名前prometheus_config_data .
    "コンフィグ用データ"聞いてください.さて、Portainerコンソールボタンを介してプロメテウスコンテナにアクセスできないからです.または、私はちょうどばかです🤷‍♂️ しかし、コンフィグレーションファイルを編集する方法が必要です.設定ファイルのボリューム.
    コンテナを作成します.“コンテナ”に移動し、“コンテナを追加”ボタンを破る.次に、下のスクリーンショットを見て、名前、画像、ポート、ボリュームの値を入力します.停止しない限り、再起動ポリシーを変更します.

    その後、“コンテナを展開”ボタンを押すと少し待つ.

    プロメテウスの設定


    Prometheusコンテナに接続できない方法を知らないので、ターミナルセッションを介して設定ファイルを編集します.あなたが使っているならばnano 次の行を実行し、以下のようにします.
    sudo nano /var/lib/docker/volumes/prometheus_config_data/_data/prometheus.yml
    
    # my global config
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).
    
    # Alertmanager configuration
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          # - alertmanager:9093
    
    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    rule_files:
      # - "first_rules.yml"
      # - "second_rules.yml"
    
    # A scrape configuration containing exactly one endpoint to scrape:
    # Here it's Prometheus itself.
    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
    
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    
        static_configs:
        - targets: ['localhost:9090']
    
      - job_name: 'flask_app'
        metrics_path: '/metrics'
        static_configs:
        - targets: ['172.17.0.1:8000']
    
    それは同じデフォルトの設定ですが、追加job_name 最後に.私は明らかにすることを決めたmetrics_path ここで、我々が必要であるならば、我々がそれを変えることができることを示しています.しかし、最も重要な部分はtargets ! Linux上のホストマシンのIPアドレスは172.17.0.1 あなたのDockerコンテナのために.または、あなたはPortainerで「ネットワーク」タブを訪問することができて、Abridge インターフェイス.
    プロメテウスコンテナを再起動してhttp://0.0.0.0:9090/targets . あなたは「状態」を見るべきですUP 両方のターゲットに対して.
    我々は我々に役立つ404のアプリをリフレッシュする場合はhttp://0.0.0.0:8000/ それからgraph 全体の要求のために、我々は見なければなりません..まあ合計要求のグラフ.
    クール、ええ?それを美しくしましょう!🐹

    グラファナ


    再び、ボリュームを作成するgrafana_data . 次に、下にスクリーンショットのようにコンテナーを作成します

    ヒット展開、待ち、そしてhttp://0.0.0.0:3000/ . デフォルトのログイン/パスワードは管理者/管理者です.ログイン後に変更できます.
    データソースの設定http://0.0.0.0:3000/datasources . または“データソース”タブ⚙️ 左側に署名してください.次に、青色の“データソースを追加”ボタンをクリックし、“prometheus”を選択します.非常に重要で、以前と同様に、「HTTP」セクションの中の「URL」パラメタは172.17.0.1:9090 . なぜなら、Grafanaはホスト名でプロメテウスコンテナにアクセスできないからです.それで、我々はそれを言いますプロメテウスが動作しているポートのホストマシンのIPアドレスに接続します.その後、スマッシュ“保存&テスト”.いつものように、あなたはprometheus_container_name:port そして、保存後に“http error badゲートウェイ”を観察します.
    今、我々はオーバーオーバーすることができます➕ “作成”の下に“ダッシュボード”にサインしてクリックします.またはちょうど訪問http://0.0.0.0:3000/dashboard/new . 次に、“新しいパネルを追加”スマッシュ.右側に“タイトル”あなたの心の欲望を変更します.私はシンプルな“フラスコトータルリクエスト”を選んだ.グラフ以下の“メトリック”の下にflask_http_request_total . ここではあなたのための便利なスクリーンショットです

    その後、右上隅にある“適用”をクリックします.そして今、あなたはあなたのアプリケーションを監視するPrometheusデータから美しいグラフを作るGrafanaを持っている!
    我々は、エルクを設定します.しかし、私はあなたが既にそれをする方法を知っていると思います😉