Dockerで作る開発環境:Memcached exporterの導入

スポンサーリンク
Dockerで作る開発環境:memcached-exporterの導入 ノウハウ
Dockerで作る開発環境:memcached-exporterの導入
この記事は約9分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、dockerで構築した開発環境において、memcached-exporterを導入した手順をご紹介します。

スポンサーリンク

実行環境

この記事では、下記の記事で構築している開発環境を前提にしています。もし環境構築等のハンズオンに興味がありましたら、下記の記事を参考に環境構築をお願いします。

ただ、修正内容が積み重なっているので、下記のタグをローカルに持ってきて、参照するといいと思います。この記事では、このタグに対しての修正内容を解説しています。

背景

前回はMemcachedを導入したので、今回は、memcached-exporterを入れて、Memcachedのメトリクスを可視化をします。

ディレクトリ構造

ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新、削除になります。

.
├── LICENSE
├── Makefile
├── README.md
└── app
    ├── apache-exporter
    ├── compose.yml
    ├── flyway
    ├── grafana
    │   ├── dashboard.yml
    │   └── dashboards
    │          └── memcached.json
    ├── influxdb
    ├── k6
    ├── memcached
    ├── memcached-exporter
    │   └── Dockerfile
    ├── mongo
    ├── mysql
    ├── mysqld-exporter
    ├── prometheus
    │   └── prometheus.yml
    ├── schemaspy
    ├── web
    │   ├── Dockerfile
    │   └── CodeIgniter-3.1.13
    │        └── application
    │                └── controllers
    │                        └── Sample.php
    └── xhgui

compose.yml

下記の内容をファイル(compose.yml) 202 – 211 行目に追記します。

  memcached-exporter:
    build: ./memcached-exporter
    container_name: memcached-exporter
    restart: unless-stopped
    command: --memcached.address memcached:11211
    ports:
      - 9150:9150
    networks:
      - net

memcached-exporter/Dockerfile

下記の内容で新規ファイル(memcached-exporter/Dockerfile) を作成します。

FROM prom/memcached-exporter:latest

prometheus/prometheus.yml

下記の赤字内容でファイル(prometheus/prometheus.yml) 10-12行目を追記します。

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'docker-for-mac'
    static_configs:
      - targets: ['docker.for.mac.host.internal:9323']
  - job_name: 'apache'
    static_configs:
      - targets: ['apache-exporter:9117']
  - job_name: 'memcached'
    static_configs:
      - targets: ['memcached-exporter:9150']
  - job_name: 'mysql'
    static_configs:
      - targets: ['mysqld-exporter:9104']

grafana/dashboards/memcached.json

grafanaダッシュボードのテンプレートID:3063のJSONを新規ファイル(grafana/dashboards/memcached.json)として登録します。詳細は、GitHubをご確認ください。

grafana/dashboard.yml

下記の内容をファイル(grafana/dashboard.yml) 26-36行目に追記します。

  - name: 'memcached'           # Dashboardの「名前」
    orgId: 1                    # デフォルトのままで
    folder: 'Service'           # Dashboardが格納される「フォルダ名」
    type: file                  # デフォルトのままで
    disableDeletion: false      # Dashboardの「削除可否」
    updateIntervalSeconds: 10   # Dashboardの「更新頻度」
    allowUiUpdates: false       # Dashboardの「UI変更可否」
    options:
      path: /var/lib/grafana/dashboards/memcached.json    # dashboardの「jsonファイルパス」
      foldersFromFilesStructure: false                    # デフォルトのままで

grafana/dashboards/memcached.json

下記の赤字内容でファイル(web/CodeIgniter-3.1.13/application/config/memcached.php) 15行目を更新します。

$config = array(
	'default' => array(
		'hostname' => 'memcached',
		'port'     => '11211',
		'weight'   => '1',
	),
);

web/CodeIgniter-3.1.13/application/controllers/Sample.php

下記の内容をファイル(web/CodeIgniter-3.1.13/application/controllers/Sample.php) 16-37行目に追記します。

	public function indexWithCache()
	{
		$this->load->driver('cache');

		$cacheKey  = 'cache_key';
		$cacheTTL = 3600;

		$cacheData = $this->cache->memcached->get($cacheKey);
		if ($cacheData === FALSE) {
			$this->load->database();
			$query = $this->db->query('SELECT name FROM sample');
			$cacheData = $query->result();
			$this->cache->memcached->save($cacheKey, $cacheData, $cacheTTL);
		}

		foreach ($cacheData as $row)
		{
			echo $row->name . '<br />';
		}
		echo 'Total Results: ' . count($cacheData);
	}

動作確認

下記のコマンドを実行して、サービスを起動します。

make setup

ブラウザで「http://localhost:3000/dashboards」にアクセスして、下図のように表示されていれば成功です。

解説

memcached-exporterについて

memcached-exporterは、memcachedのメトリクスをPrometheus形式でエクスポートするためのツールです。以下に、memcached-exporterで確認できる主なメトリクスを示します。

  • memcached_commands_total: 各コマンドの実行回数を示すカウンターです。get, set, add, replace, append, prepend, cas, incr, decr, deleteなどのコマンドごとにカウントされます。
  • memcached_current_connections: 現在の接続数を示すゲージです。
  • memcached_evictions: キャッシュのエビクション(削除)数を示すカウンターです。
  • memcached_get_hits_total: getコマンドによるキャッシュヒット数を示すカウンターです。
  • memcached_get_misses_total: getコマンドによるキャッシュミス数を示すカウンターです。
  • memcached_items: 現在のアイテム数を示すゲージです。
  • memcached_limit_maxbytes: キャッシュの最大バイト数を示すゲージです。
  • memcached_read_bytes_total: 読み取ったバイト数を示すカウンターです。
  • memcached_written_bytes_total: 書き込んだバイト数を示すカウンターです。

また、以下のようなメトリクスも取得できます。

  • 各コマンドの処理時間を示すヒストグラム(memcached_command_duration_seconds
  • キャッシュの使用率を示すゲージ(memcached_bytes / memcached_limit_maxbytes
  • キャッシュヒット率を示すゲージ(memcached_get_hits_total / (memcached_get_hits_total + memcached_get_misses_total))

また、memcached-exporterには、-web.listen-addressなどのフラグを使用して、ポート番号やIPアドレスを指定することができます。

おわりに

今日は、dockerで構築した開発環境にmemcached-exporterを導入し、メトリクスを可視化しました。k6を使用して、キャッシュを使用している場合と使用していない場合でどのような変化があるかをgrafanaで確認するとよいと思いました。また、xhguiでコールグラフを確認してみても面白いと思います。

今回使用したファイルは下記のGitHubにタグ付けしています。

もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました