OSSの監視ツール "Graphite" をインストールする際によくある問題とそれの回避策

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/13312bf9-b61f-372e-bc78-414cd9ab965d.png)

#はじめに

Graphiteは非常に人気のあるエンタープライズ用の監視ツールです。この記事では、Graphiteインスタンスのセットアップ中に発生する一般的な問題と、それらを回避する方法について説明します。読者はすでにGraphiteに精通していることを前提としていますが、Graphiteの基本について知りたい場合は、この記事を読む前に、[Graphiteのアーキテクチャと概念](https://qiita.com/MetricFire/items/4925de84200e41a07ab5)および[インストールとセットアップ](https://qiita.com/MetricFire/items/3ba5d2e89dacec0a6ad9)に関する記事を確認してください。この記事において、事前に知っておく必要のある重要な用語は以下になりますので、ご確認ください。

- **Carbon**

Graphiteのストレージサーバーです。 Graphiteは、単一ノードでCarbonの複数のインスタンスを実行して、着信負荷を処理できます。

- **Whisper** 

Graphiteがデータを保存するために使用するデータベース形式の名前です。
また、独自のGraphiteインスタンスを設定する場合と、[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Install%20Graphite%3A%20Common%20Issues)などのHostedGraphiteサービスを使用する場合のメリットとコストをご紹介します。運用が拡大するにつれて、独自のGraphiteインスタンスを実行するのに時間がかかりすぎて、ホストされたバージョンがはるかに実現可能になる可能性があります。

この記事を読みながら、[無料の試用アカウント](https://www.hostedgraphite.com/signup?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Install%20Graphite%3A%20Common%20Issues)で独自のHostedGraphiteを試してみてください。メトリックを直接送信し、それがどのように機能するかをテストすることができます。また、詳しく知りたい方は[デモをご予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Install%20Graphite%3A%20Common%20Issues)ください。

#Graphiteを設定するための最初のステップ

[インストールチュートリアル]((https://qiita.com/MetricFire/items/3ba5d2e89dacec0a6ad9))では、GraphiteのDockerイメージを使用して、Graphiteアプリケーションを実行およびデモしました。 ただし、最高のパフォーマンスを実現するには、CentOS / Debianのいずれかを実行している実稼働マシンにGraphiteをインストールする必要があります。 これには、Graphiteを起動して実行するために、多くの手動の手順に行う必要があります。

それでは、ここから早速始めていきましょう。 この例では、Ubuntu18.04を使用してGraphiteを起動して実行します。

1. 次のコマンドを実行して、ローカルパッケージを更新します。

```
sudo apt-get update
```

2. GraphiteWebアプリケーションとGraphiteCarbonをインストールします。

```
sudo apt-get install graphite-web graphite-carbon
```

3. インストールプロセス中に、アンインストールして再インストールすることにした場合に、Carbonデータベースを保持するかどうかを尋ねるプロンプトが表示されます。 このプロンプトには「No」を選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/3d5f87fb-830c-5936-d618-57d71dbb6d09.png)

これで技術的にはGraphiteとCarbonをインストールしましたが、まだいくつかの壁が存在しています。これから1つずつ対処するさまざまな方法をご紹介していきます。


###SQLite3の使用
Graphite Webアプリケーションは、デフォルトでSQLite3データベースファイルを使用してデータを保存します。 SQLite3は本格的なデータベースシステムではないため、これは本番システムにはまったくお勧めできません。 したがって、PostGreSQLをインストールして構成し、Graphiteがそこにデータを保存できるようにします。

```
sudo apt-get install postgresql libpq-dev python-psycopg2
```

これにより、Graphiteが接続してデータを保存するPostGreSQLがインストールされます。

次に、データベースにユーザーGraphiteとデータベースGraphiteを作成します。

```
madhur@madhur-Virtual-Machine:~$ sudo -u postgres psql
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# create user graphite with password 'password';
CREATE ROLE
postgres=# create database graphite with owner graphite;
CREATE DATABASE
postgres=# \q
```

次に、デフォルトのデータベースであるSQLiteの代わりに、新しいデータベースサーバー設定を使用するようにGraphiteに指示する必要があります。 /etc/graphite/local_settings.pyの値を、次のデフォルト値から作成したばかりの新しいデータベース設定に変更します。

古い値：

```
DATABASES = {
    'default': {
        'NAME': '/var/lib/graphite/graphite.db',
        'ENGINE': 'django.db.backends.sqlite3',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': ''
    }
}
```

新しい値：

```
DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'graphite',
        'PASSWORD': 'password',
        'HOST': '127.0.0.1',
        'PORT': ''
    }
}
```

コマンド「sudographite-managemigrate」を実行して、Djangoが新しいデータベースにテーブルを作成できるようにします。 次の出力が表示されます。

```
madhur@madhur-Virtual-Machine:~$ sudo graphite-manage migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, tagging
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK
  Applying tagging.0001_initial... OK
  Applying tagging.0002_on_delete... OK
madhur@madhur-Virtual-Machine:~$ 
```

###自動起動
何らかの理由で本番サーバーが再起動された場合、GraphiteとCarbonは自動的に起動しません。 自動的に開始するには、/ etc / default / graphite-carbonにいくつかの変更を加える必要があります。CARBON_CACHE_ENABLEDの値をtrueに変更します。

これにより、起動時にGraphiteとCarbonが自動的に起動します。


###ログローテーション
デフォルトでは、カーボンはログローテーションを行いません。 つまり、ログファイルを手動でクリーンアップするか、ログローテーションを有効にしない限り、ハードディスクがいっぱいになるリスクがあります。

1. ファイル/etc/carbon/carbon.confを編集します
2. ENABLE_LOGROTATIONの値をTrueに変更します

Graphiteウェブインターフェースを稼働させるには、Apacheをインストールする必要があります

```
sudo apt-get install apache2 libapache2-mod-wsgi
```

Apache WebサーバーでGraphiteを有効にするには、次のコマンドを実行します

```
madhur@madhur-Virtual-Machine:~$ sudo a2dissite 000-default
Site 000-default disabled.
To activate the new configuration, you need to run:
  systemctl reload apache2
madhur@madhur-Virtual-Machine:~$ sudo cp /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available/
madhur@madhur-Virtual-Machine:~$ sudo a2ensite apache2-graphite
Enabling site apache2-graphite.
To activate the new configuration, you need to run:
  systemctl reload apache2
madhur@madhur-Virtual-Machine:~$ sudo service apache2 reload
```

これが完了したら、http：// localhost にアクセスすると、最終的にGraphiteWebアプリケーションが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/735d3eef-5080-fb69-8736-9345348a59fc.png)

#Graphiteインストールの際のトラブルシューティング

Graphiteとカーボンを生産用にセットアップする際に問題が発生した場合：

- RHEL、CentOS、Debian、Ubuntuなどのサポートされているオペレーティングシステムを使用していることを確認してください。

- 正しいバージョンのPython、Django、Apache Webサーバー、およびデータベースエンジンが使用されていることを確認してください。 問題のほとんどは、これらの実行中のパーツ間の非互換性が原因で発生します。
- 次のリポジトリで既存の問題を探します。

https://github.com/graphite-project/carbon/issues

https://github.com/graphite-project/graphite-web/issues

ほとんどの場合、あなたが直面している問題は、以前にも他の誰かが直面したことがあるはずですので、きっと役に立つ情報が見つかるでしょう。

#ホスト型Graphiteとセルフホスト型Graphite

記事の最後に到達し、Graphiteを正常に実行できているようでしたら、おめでとうございます。 問題が発生した場合は、インターネット上に起動して実行するためのトラブルシューティングに関する記事が多数ありますが、ここでは説明を割愛させて頂きます。 MetricFireに連絡して、ホストされているバージョンのGraphiteがより適しているかどうかを確認することもできます。

この記事の残りの部分では、MetricFireなどのホステッドGraphiteを使用することと、独自のGraphiteを使用することの利点を分析します。 MetricFireは次の方法で役立ちます。

###24/7オンコールサポート
ホスト型Graphiteは、世界中のどこでも一年中サポートと自動監視を提供します。

###セキュリティ
ホスト型Graphiteは、HTTPSやTLSなどのプロトコルを使用してデータパケットを送信することで高いセキュリティを提供します。このようなセキュリティを提供するために自己ホスト型Graphiteを構成するには、それを起動して実行するために多くのカスタム構成が必要です。

 
###自動的にアップデート
Graphiteは、Python、Django、Apache Webサーバー、データベースエンジンなどの多くの可動部分で構成されています。最適なレベルで実行するには、これらすべてのコンポーネントを定期的に更新する必要があります。 Hosted Graphiteは、これらのコンポーネントの最新の更新をバックグラウンドで適用することにより、これらの問題を解決します。

また、Hosted Graphiteの実際のテクノロジーは、通常のGraphiteとは少し異なります。開発者は、Hosted Graphiteをユーザーにとってさらに簡単にするために、Graphiteプロジェクトに追加しました。このトピックの概要は、[【Hosted Graphite】Graphiteを進化させてしまった監視ツールの記事](https://qiita.com/MetricFire/items/3374010d716420c3927a)で説明しています。

#まとめ

セルフホストのGraphiteをセットアップするプロセスを見てきました。 ただ、OSSのGraphiteの問題点としてスケーリング、セキュリティ、バックアップなどの高度なユースケースは対象外です。 このような機能は、ホストされているGraphiteによってのみ提供されております。 セルフホストのGraphiteには、Linux管理、Graphite、python、Django、Apache Webサーバー、PostGreSQLの専門家である管理エンジニアと専門エンジニアが必要です。 ほとんどのセットアップでは、自己ホスト型Graphiteを実行するコストは、SaaSのホスト型Graphiteを使用するコストを上回ってしまうのが現実です。

Hosted Graphiteを試すには、[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Install%20Graphite%3A%20Common%20Issues)のHosted Graphite[無料トライアル](https://www.hostedgraphite.com/signup?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Install%20Graphite%3A%20Common%20Issues)にログインして、今日からメトリックの送信を開始してください。 [デモをご予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Install%20Graphite%3A%20Common%20Issues)してMetricFireに連絡、ご相談することができ、いつでも監視ニーズについて話し合うことができます。