WindowsでGrafana+InfluxDB2.0+Glances&OhmGraphiteを使う

よくサーバー用OSにCentOSなどUNIX(LINUX)系が使わるため、公開されているサーバー監視ツールの記事も自然とLinux系が多くなってしまいます。私はWindows大好きマンなので今回はWindowsで構築していきます。
あまり詳しいことは~~わからないから~~書かないので、ご了承ください。

# 目次
- 完成図
- 使用するソフト＋説明
- InfluxDB 2.0
- Glances
- OhmGraphite
- 確認してみる
- Grafana
- 最後に
- 参考文献

## 完成図
こんな感じに「かっこいい！」ってなればOKだと思います。グラフの大きさや種類も自由に変えらます。
![grafana_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660536/ffbd8635-c4b7-00b6-a1f4-b97d6a42ce2f.png)


## 使用するソフト＋説明
### InfluxDB 2.0.7
- オープンソースの時系列データベース
- メトリクス可視化ツールとの相性〇
- 1.xから2.0にアップデートされていろいろ変わった(↓変更点)

https://www.influxdata.com/blog/influxdb-2-0-open-source-is-generally-available/

### Glances 3.1.7
- Pythonで書かれたオープンソースの監視ソフト
- Windowsでも動くため採用

### OhmGrahite 0.19.0
- C#で書かれたオープンソースの監視ソフト
- Windows用なので採用

### Grafana 8.0.3
- 取得したメトリクスをかっこよく見せる可視化ソフト
- プラグインなどもあり自由にカスタマイズできる

### その他環境
- Windows 10 Home
- Python 3.7.3
    - psutil 5.8.0
    - influxdb-client 1.18.0
    - windows-curses 2.2.0

## InfluxDB 2.0
注意: 現在の最新バージョン"2.0.7"でコンソールでデータベースを作成しようとすると確認用のパスワードが打てない問題があります。今回は"influx.exe"は使いませんが使う人は注意してください。

https://github.com/influxdata/influxdb/issues/21441

### ダウンロード&インストール

https://portal.influxdata.com/downloads/

Versionは2.0.7、PlatformはWindows Binary(64bit)を選び、下に表示された文を管理者権限でPowershellにコピペするだけです。URL部分をブラウザにコピペしてもダウンロードされます。

公式のインストールページ

https://docs.influxdata.com/influxdb/v2.0/install/?t=Windows

```shell
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.7-windows-amd64.zip -UseBasicParsing -OutFile influxdb2-2.0.7-windows-amd64.zip
Expand-Archive .\influxdb2-2.0.7-windows-amd64.zip -DestinationPath 'C:\Program Files\InfluxData\influxdb2\'
```

展開したら"influxd.exe"をコマンドプロンプト上で起動します。
次にブラウザ上で```localhost:8086```にアクセスし、初期設定を行います。
`Organization`は何でもいいです。
`Initial Bucket Name`はここでは`Glances`にしておきます。
`Token`は`Data`>`Token`に一つ自動で作成されていると思います。なかったら作成してください。
これでInfluxDB 2.0のセットアップは終わりです。

## Glances
### ダウンロード&インストール
Python 3.6以上をインストール

https://www.python.org/downloads/

コマンドプロンプトで
`py -m pip install psutil`
`py -m pip install glances`
`py -m pip install windows-curses`
`py -m pip install influxdb-client`
を実行します。

その後一度`py -m glances`を実行して動作確認してください。

### glances.confの編集
次にInfluxDB 2.0に値を送るための準備をします。
環境によっても変わりますが、
`C:\Users\USER\AppData\Local\Programs\Python\Python37\share\doc\glances`
`C:\Users\USER\AppData\Roaming\Python\share\doc\glances`
このどちらかに"glances"というフォルダがあると思います。その中の"glances.conf"を編集します。
[influxdb2]という項目を編集します。

```
[influxdb2]
# Configuration for the --export influxdb2 option
# https://influxdb.com/
host=localhost
port=8086
protocol=http
org=作成した組織
bucket=作成したバケット
token=作成したトークン
# Prefix will be added for all measurement name
# Ex: prefix=foo
#     => foo.cpu
#     => foo.mem
# You can also use dynamic values
#prefix=`hostname`
prefix=localhost
# Tags will be added for all measurements
#tags=foo:bar,spam:eggs
# You can also use dynamic values
#tags=system:`uname -s`
```

`%appdata%`内に"glances"というフォルダを作成し、そこに"glances.conf"を置きます。
保存したファイルのパスが`%appdata%\glances\galnces.conf`になっていればOKです。

最後に実行します。
こちらも環境によりますが
`C:\Users\USER\AppData\Local\Programs\Python\Python37\Scripts`
`C:\Users\USER\AppData\Roaming\Python\Python37\Scripts`
このどちらかに"glances.exe"があると思います。

絶対パスを書くか環境変数にパスを通すかして
`glances.exe --export influxdb2`
をエラーなく実行できたらGlancesのセットアップは終了です。

## OhmGrahite
### ダウンロード&インストール

https://github.com/nickbabcock/OhmGraphite

好きな場所に展開でOK

### OhmGraphite.exe.configの設定

```xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="type" value="influx2" />
    <add key="influx2_address" value="http://localhost:8086" />
    <add key="influx2_org" value="上と同じ組織" />
    <add key="influx2_bucket" value="新しく作成したバケット(例：OhmGraphite)" />
    <add key="influx2_token" value="上と同じトークンでもOK" />
    <add key="interval" value="5" />
  </appSettings>
</configuration>
```

こちらは管理者権限でないと実行できないようです。
コマンドプロンプトから`OhmGraphite.exe run`を実行します。
これでOhmGraphiteのセットアップは終了です。

##確認してみる
ここまできたら一度`localhost:8086`にアクセスして、きちんと値を記録しているか確認します。
`Explorer`を選択し、`From`に作成したBucket(この記事ではGlancesとOhmGraphiteを作成)があるか確認し、それを選択した後に右にいろいろ出るか確認してください。
Bucketがない場合は作成し、右に出ていない場合はGlancesかOhmGraphiteのconfigが間違えている可能性があります。
試しに`Glances>localhost.cpu>total`を選択し`Submit`を押してグラフが出現すれば成功です。

![influxdb_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660536/48333768-b497-1285-1d93-b873d8b392f6.png)


## Grafana
### ダウンロード&インストール

https://grafana.com/grafana/download?platform=windows

ここの少し下のところに`Download the zip file`があるのでそこからダウンロード&展開します。

### 設定
これもコマンドプロンプトから`grafana-server.exe`を実行し、`localhost:3000`へアクセスします。
ユーザー名とパスワードを登録し、もう一度ログインします。

`Configuration`から`Data Souece`>`Add Souece`>`InfluxDB`を選びます。
`Name`は任意
`Query Language`はFluxを選択
`URL`は`localhost:8086`
`InfluxDB Details`には`organization` `token`を入力します。
`Save&test`をクリックし`5 buckets found`と出ればOKです。

### データの登録方法
詳しいGrafanaの使い方はここでは書きません。~~手抜き~~

`localhost:8086`へアクセスし、`Explorer`からGrafanaに登録したいデータを選択します。
右下の`Script Editor`を選択すると、コードが表示されるのでそれをコピーします

```flux:一例
from(bucket: "Glances")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "localhost.cpu")
  |> filter(fn: (r) => r["_field"] == "user")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")
```

これをGrafanaの`Query`にペーストし、`Apply`すれば登録完了です。

## 最後に
無事にサーバー監視できたでしょうか。初めての投稿なので誤字脱字、間違いがあればごめんなさい。influxdb-clientを使えばApacheの同時接続数などを送ったりもできます。是非ためしてみてください。

2023/06/16 mdの構文を修正