LoginSignup
2
1

More than 1 year has passed since last update.

AmazonLinux2にDockerを使わずGraphite+Grafanaを構築する

Last updated at Posted at 2021-05-04

はじめに

Dockerを使うと非常に簡単なのですが、あえてDockerを使わずに構築してみるという趣旨の記事です。
基本は公式インストールマニュアルに沿ってインストールしていきます。

環境

今回構築した環境です。

  • Graphite - 蓄積
  • Grafana - 描画
  • Apache + mod_wsgi - webサーバ
項目
OS AmazonLinux2
インスタンスタイプ t3.micro
Python 3.7.9 (デフォルトでインストール済み)
SQLite 3.35.5 (デフォルトで3.7.17が入っていますが動作しないので最新版を入れなおします)
Apache 2.4.46
Graphite 1.1.8
Grafana 7.5.5

OS設定

時刻、ロケールの設定を日本で使いやすいように設定します。

sudo timedatectl set-timezone Asia/Tokyo
sudo localectl set-locale LANG=ja_JP.UTF-8
sudo localectl set-keymap jp106

Graphite構築

基本的にrootユーザで実行しています。

Graphiteインストール

以下の公式インストール手順を参考にしています。

いくつかインストール手順がありますが、その中の pipでインストールpython3 でインストールしていきます。
※ python3は正式サポートされていないので参考程度にお願いします。

# 必要なライブラリをインストール
yum install python3-devel cairo-devel libffi-devel

# デフォルトのディレクトリにインストール
mkdir /opt/graphite
export PYTHONPATH="/opt/graphite/lib/:/opt/graphite/webapp/"
pip3 install https://github.com/graphite-project/whisper/tarball/master
pip3 install https://github.com/graphite-project/carbon/tarball/master
pip3 install https://github.com/graphite-project/graphite-web/tarball/master

Graphite初期設定

こちらも公式手順に沿って実施しています。

Webappデータベースのセットアップ

Graphite(Djangoアプリ)で使用するデータベースをセットアップします。今回はデフォルトのSQLiteを使用します。
ただし、AmazonLinux2にデフォルトでインストールされているSQLiteは3.7.17と古くDjangoが動作しないため、最新版を入れなおします。
SQLiteダウンロード

# ビルドに必要なライブラリをインストール
yum install gcc

# 最新版をダウンロードして展開
wget https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz
tar -zxvf sqlite-autoconf-3350500.tar.gz

# ビルドしてインストール
cd sqlite-autoconf-3350500/
./configure --prefix=/usr/local
make
make install

# シンボリックリンクを設定してPATHを通す(デフォルトのSQLiteから、最新版のSQLiteを見るようにする)
mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3

# 全ユーザにPATHを通す
echo /usr/local/lib > /etc/ld.so.conf.d/sqlite3.conf
ldconfig

# バージョン確認(3.35.5になっていればOK)
sqlite3 --version

最新版のSQLiteをインストールできたので、Webappデータベースをセットアップします。

PYTHONPATH=/opt/graphite/webapp django-admin.py migrate --settings=graphite.settings

/opt/graphite/storage/graphite.db が新規作成されているはずです。

Webアプリの構成

GraphiteをWebで公開するための設定をします。
ドキュメントには3つ用意されていますが、今回は Apache + mod_wsgi を使用します。

  • nginx + gunicorn
  • Apache + mod_wsgi
  • nginx + uWSGI

apache + mod_wsgi のインストール

# apacheインストール
yum install httpd

# mod_wsgiインストール
yum install httpd-devel gcc
pip3 install mod_wsgi

# インストールしたモジュールを探索
find /usr -name "mod_wsgi*.so"

# 見つけたモジュールをコピー
cp /usr/local/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so /etc/httpd/modules/mod_wsgi.so

apache経由でgraphiteにアクセスできるように設定します。

# httpdの実行ユーザでログを読み書きできるようにする
chown -R apache:apache /opt/graphite/storage/

# 標準設定をコピーして作成
cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
cp /opt/graphite/examples/example-graphite-vhost.conf /etc/httpd/conf.d/graphite-vhost.conf

# 静的コンテンツの設定
PYTHONPATH=/opt/graphite/webapp django-admin.py collectstatic --noinput --settings=graphite.settings

静的コンテンツ設定を追加します。

/etc/httpd/conf.d/graphite-vhost.conf
        ...
        Alias /static/ /opt/graphite/static/
        # 追加
        <Directory /opt/graphite/static/>
                Require all granted
        </Directory>
        ...

ここまでの設定を反映させて、apacheを起動させます。

systemctl start httpd
systemctl enable httpd

Carbonの構成

時系列データをリッスンするバックエンドデーモンを設定します。

# 標準設定をコピーして作成
pushd /opt/graphite/conf
cp carbon.conf.example carbon.conf
cp storage-schemas.conf.example storage-schemas.conf

# 起動
/opt/graphite/bin/carbon-cache.py start

Graphite動作確認

http://[IPアドレス]/
ここまでの設定で、ポート80にアクセスするとGraphiteのトップページが表示されます。
Graphiteトップ.PNG

試しに手動でデータを入れてみます。
データの入力

yum install nc
echo "local.random.diceroll 4 `date +%s`" | nc localhost 2003
  1. Graphite画面から、左側のTreeで「Metrics」->「local」->「random」->「diceroll」を選択する。
  2. 表示されたグラフの左下「Graph Options」->「X-Axis」->「Timezone」でAsia/Tokyoに変更する。

Graphiteグラフサンプル.PNG

Grafana構築

Grafanaインストール

公式インストール手順 でインストールします。

# インストール
wget https://dl.grafana.com/oss/release/grafana-7.5.5-1.x86_64.rpm
sudo yum install grafana-7.5.5-1.x86_64.rpm

# 起動
sudo systemctl enable grafana-server.service
sudo systemctl start grafana-server.service

Grafana動作確認

デフォルトでポート3000でリッスンしています。
http://[IPアドレス]:3000/

Grafanaログインページ.PNG

ID/PW : admin/admin でログインできます。
Grafanaトップ.PNG

Graphiteと連携させる

  1. 左タスクバー「Configuration」->「Data Sources」から、Graphiteデータソースを追加します。 データソース追加.PNG
  2. 左タスクバー「Create」->「Add an empty panel」から空のパネルを追加します。
  3. 先ほどのサンプルデータを表示させます。 Grafanaグラフサンプル.PNG

おわりに

今回はDockerを使わずにGraphite+Grafanaを構築してみましたが、やはりDockerを使用したほうが簡単ですね。
Graphiteの設定をデフォルトのままにしていますが、本番稼働するには設定を見直したほうが良いです。

次は収集部分を作ってみるつもりです。AWSで構築しているので、CloudWatch(収集) + Graphite(蓄積) + Grafana(描画)という構成にしてみようと思います。

[2021/5/6 追記]
もう少しGraphiteの設定を見直してみました。
AmazonLinux2にインストールしたGraphiteの設定を更新する

参考URL

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1