grafanaにアクセスできなかったので，Apache2のリバースプロキシを使って解決してみた話

# インストールしたgrafanaにアクセスできない！

## 症状
自分のVM(192.168.100.144)にgrafanaをインストールしてみたけど，Webブラウザからアクセスできない

#### Webブラウザで確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459889/fdd31345-8492-719f-1fb3-b7080cc333ce.png)



#### curlで確認
```bash
$ curl http://192.168.100.144:3000
$ curl: (7) Failed to connect to 192.168.100.144 port 3000: Connection refused
```
Connection refusedとなってしまう．

#### localから確認
```bash
$ curl localhost:3000
<a href="/grafana/login">Found</a>.
```
localhostではしっかり立っている模様

```bash
$ curl 192.168.100.144:3000
<a href="/grafana/login">Found</a>.
```
ipアドレスで打ってもアクセスできている

#### サービスは動いている
```bash
$ systemctl status grafana-server.service
● grafana-server.service - Grafana instance
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-11-17 02:47:47 UTC; 10min ago
     Docs: http://docs.grafana.org
 Main PID: 31548 (grafana-server)
    Tasks: 9 (limit: 4915)
   CGroup: /system.slice/grafana-server.service
           └─31548 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins cfg:d

Nov 17 02:56:34 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:56:34+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
Nov 17 02:56:49 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:56:49+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
Nov 17 02:57:08 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:57:08+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
Nov 17 02:57:10 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:57:10+0000 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=GET path=/ status=302 remote_addr=[::1] time_ms=0 size=37 referer=
Nov 17 02:57:19 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:57:19+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
Nov 17 02:57:30 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:57:30+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
Nov 17 02:57:44 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:57:44+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
Nov 17 02:58:01 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:58:01+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
Nov 17 02:58:20 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:58:20+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
Nov 17 02:58:38 sugimoto-1 grafana-server[31548]: t=2021-11-17T02:58:38+0000 lvl=info msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=GET path=/api/live/ws status=400 remote_addr=192.168.100.218 time_ms=0 size=12 referer=
lines 1-19/19 (END)
```
#### Port 3000はLISTENになっているか？
```bash
$ ss -la | grep 3000
tcp              LISTEN                 0                   128                                                                                               *:3000                                                          *:*
```
なっているねぇ

### 症状まとめ
何が悪いのかよくわからん
(心当たりがある方教えてほしい！！)


## 解決方法
ローカルからはIPアドレスを叩いてもアクセス可能なので，既に立てているApache2のリバースプロキシーを用いてアクセスしてみることにした

### Apache2のリバースプロキシ設定
#### proxy_module、proxy_httpモジュールを有効化する
```bash
$ cd /etc/apache2/mods-enabled
$ ln -s ../mods-available/proxy.load proxy.load
$ ln -s ../mods-available/proxy_http.load proxy_http.load
$ ln -s ../mods-available/proxy.conf proxy.conf
```

#### 設定ファイルに付与
設定ファイル：**/etc/apache2/mods-enabled/proxy.conf**

上記設定ファイルに追加

```conf
<IfModule mod_proxy.c>
  ...

  # 下記を追加
  ProxyRequests Off
  ProxyPass /grafana http://127.0.0.1:3000
  ProxyPassReverse  /grafana http://127.0.0.1:3000

</IfModule>
```

#### Apache2再起動
```bash
$ sudo systemctl restart apache2
```

### grafanaの設定変更
設定ファイル場所：**/etc/grafana/grafana.ini**
設定ファイル中の**[server]**の中にある**root_url**を編集します

```config
root_url = %(protocol)s://%(domain)s:/grafana
```

#### grafanaの再起動
```bash
$ sudo systemctl restart apache2
```

## アクセスしてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459889/7313e626-b66f-6331-4b05-57ae16e4cc6c.png)


ちゃんとアクセスできていることがわかる．