prometheusを1系の最新にversion up

# はじめに
[prometheus 2.0](https://prometheus.io/docs/prometheus/2.0/migration/)がでましたね。後方互換性ないのでversion up大変そうだなとと思いつつ、そもそも1系の最新(2017/12現在で1.8.2)とかにもできてない。
なので1.8.2にとりまあげてみる(from 手元の環境が1.6.1)。
バイナリを最新にするだけではある。

ついでにalertmanagerも0.5.1-> 0.11.0へ。

# 注意点
- 流れ
    - 新しいバイナリDL
    - バックアップいい感じにとる
    - data/とconfig関連のものだけ新しいのに移す
    - 動作確認
- 環境
    - ubuntu 16 on EC2
    - ディレクトリ構成は以下とかになっているとする
        - /hoge/prometheus
        - /hoge/alertmanager
- バイナリの取得方法
    - prometheusは[githubのtags](https://github.com/prometheus/prometheus/tags)から1系最新を探す
    -  alertmanagerは[公式Downloads](https://prometheus.io/download/)から
- 起動
    - 今回は`./prometheus &`、`./alertmanager &`的に起動
    - serviceなりsupervisorctlなりで管理してる場合はお好きに

# 雑手順

``` bash
### current version
$ cd /hoge/prometheus
$ ./prometheus --version
prometheus, version 1.6.1 (branch: master, revision: 4666df502c0e239ed4aa1d80abbbfb54f61b23c3)
  build user:       root@ca1b452514b7
  build date:       20170419-13:26:24
  go version:       go1.8.1
$ cd /hoge/alertmanager
$ ./alertmanager --version
alertmanager, version 0.5.1 (branch: master, revision: 0ea1cac51e6a620ec09d053f0484b97932b5c902)
  build user:       root@fb407787b8bf
  build date:       20161125-08:14:40
  go version:       go1.7.3

### dl latest bin for prometheus / alertmanager
$ cd /tmp/
$ wget https://github.com/prometheus/prometheus/releases/download/v1.8.2/prometheus-1.8.2.linux-amd64.tar.gz
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.11.0/alertmanager-0.11.0.linux-amd64.tar.gz
$ ls
alertmanager-0.11.0.linux-amd64.tar.gz prometheus-1.8.2.linux-amd64.tar.gz
$ tar xvf prometheus-1.8.2.linux-amd64.tar.gz
$ tar xvf alertmanager-0.11.0.linux-amd64.tar.gz

### stop current process & get backup
$ cd /hoge
$ pkill prometheus
$ pkill alertmanager
$ ls
alertmanager  prometheus
$ mv prometheus.bak prometheus.old
$ mv alertmanager alertmanager.old
$ ls
alertmanager.old prometheus.old
$ cp -r /tmp/prometheus-1.8.2.linux-amd64 ./prometheus
$ cp -r /tmp/alertmanager-0.11.0.linux-amd64 ./alertmanager
$ ls
alertmanager  alertmanager.old prometheus  prometheus.old

### migrate to latest bin w/ previous data/ & configs for prometheus

$ cd prometheus/
$ mv prometheus.yml prometheus.yml.org
$ cp -r ../prometheus.old/data/ .
$ cp ../prometheus.old/prometheus.yml .
$ cp -r ../prometheus.old/alert_rules/ .
---
# notes
I am including alert rule files as following in prometheus.yml.
rule_files:
  - 'alert_rules/*.rule'
---

### migrate to latest bin w/ previous data/ & configs for alertmanager
$ cd ../alertmanager
$ mv simple.yml simple.yml.org
$ cp ../alertmanager.old/simple.yml .
$ cp -r ../alertmanager.old/data/ .

### start them

$ cd /hoge/alertmanager
$ ./alertmanager -config.file=simple.yml > alertmanager.log 2>&1 &
$ cd /hoge/prometheus
$ ./prometheus -alertmanager.url=http://localhost:9093/

### current version
$ ./prometheus --version
prometheus, version 1.8.2 (branch: HEAD, revision: 5211b96d4d1291c3dd1a569f711d3b301b635ecb)
  build user:       root@1412e937e4ad
  build date:       20171104-16:09:14
  go version:       go1.9.2
$ ./alertmanager --version
alertmanager, version 0.11.0 (branch: HEAD, revision: 30dd0426c08b6479d9a26259ea5efd63bc1ee273)
  build user:       root@3e103e3fc918
  build date:       20171116-17:43:56
  go version:       go1.9.2

### open web UI by your browser & confirm post metrics data
# http://{your_ip}:9090
# http://{your_ip}:9093

```

# おわりに
基本バイナリ更新だけですればよく問題なさげ。
しかし地味に手作業はめんどいのでapt-getとかyumでぱぱっとやりたい感じもある。
あるいはdockerでうにょるか。

なお、[prometheusのchangelog](https://github.com/prometheus/prometheus/blob/master/CHANGELOG.md)(1.6.2->1.8.2)と[alertmanager](https://github.com/prometheus/prometheus/blob/master/CHANGELOG.md)(0.5.1-> 0.11.0)を眺めてみた。prometheusはちょっと?alertmanagerはだいぶ変わった感あるが、パフォーマンス差分とかどんな感じだろか。

以上。