--> -->

skimemo


skimemo - 日記/2017-07-09/dockerでlocalhostではまった話 の変更点


#blog2navi()
*dockerでlocalhostではまった話 [#ne78d853]

dockerを使ってPrometheus + node exporter + Grafanaでサーバー監視をするお話です。~
dockerのcontainer間通信で苦労した(結局良く解ってない)ので、そのメモです。~
** localhostで他のcontainerが見えない問題 [#w591c4a4]
最初の躓きはGrafanaの設定でした。~
巷の手順では、Datasourceにlocalhost:9090を指定するとPrometheusを指定できるとありますが、UNKNOWN ERRORというのが出て設定できません。~
ここはGrafanaをdockerではなくローカルOS(?)に直接入れる事で回避しました。~
~
次にnode exporterをdockerで入れてPrometheusと繋げようとしますが、Prometheus側からnodeが見えません。~
(targetsのページでerror表示される)~
設定と起動はこんな感じです。~
■node exporter
 docker run -d -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  quay.io/prometheus/node-exporter \
    -collector.procfs /host/proc \
    -collector.sysfs /host/sys \
    -collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
■prometheus
 # vi prometheus/prometheus.yml

#code(php,nonumber,noblock){{{
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
      monitor: 'codelab-monitor'
 
 scrape_configs:
  - job_name: 'prometheus'
    static_configs:
        - targets: ['localhost:9090']
  - job_name: 'node'
    static_configs:
        - targets: ['localhost:9100']
}}}
 docker run -d -p 9090:9090 -v /root/prometheus/prometheus.yml:/prometheus.yml prom/prometheus -config.file=/prometheus.yml

'''telnet localhost 9100'''をやるとちゃんと見えますから、node exporterは正常に稼働しています。ただ、prometheusのdocker containerから見えないのです。~
** dockerのnetworkは独立 [#q0273964]
dockerのネットワークに関するこのへんの記事を見ると、dockerのnetworkは独立していて、container毎に別のipアドレスが割り当てられる事が解ります。~
図を見る限り、container内でlocalhostと指定しても、container自身が指定されるだけでlocal machineを指すのでは無いように見えます。~
~
[[Docker コンテナ・ネットワークの理解:http://docs.docker.jp/engine/userguide/networking/dockernetworks.html]]~
~
そこで、試しにdocker network内のipアドレスでアクセスを試みます。~
まずはnetwork状況の調査。~
 # docker network inspect bridge

 [
    {
        "Name": "bridge",
        "Id": "649ee6c1ef55a7cd50796b5d0dcd1e4e9afadbcd72e64945e9ff0bd007398111",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "0c0cbbd10d08494ba8b14d8c5410dc69a994f897f2bcb6754be68f8617025660": {
                "Name": "happy_carson",
                "EndpointID": "5646964074b49a4c876a2e5c17475f24327324a17f4ec29eaa0e6571976c0d79",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "61667ec99c501c033e62e0274e9d143999937c911dc4a81a32a12453a3f29c3b": {
                "Name": "pensive_stonebraker",
                "EndpointID": "e01e31c810da89ecd65ff95a618a80130496e36faf329e3a62c865742e5bffce",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]
 ]
nodeのipアドレスは172.17.0.3であることが解るので、prometheus.ymlの設定を変更します。
#code(php,nonumber){{{
        - targets: ['172.17.0.3:9100']
}}}
そしてprometheus再起動。
 # docker restart containerID
prometheusのtargetsを確認します。[[http://IPアドレス:9090/targets]]~
#ref(docker_20170709.png)~
ちゃんと認識できていますね。~
ネットワーク図的にはこんな感じ。~
#ref(network_20170709.png)~
~
** なぞ [#jf8da545]
でもググって出てくるのはlocalhostの指定ばかり。~
みんなこれでちゃんと動いているんでしょうね。docker daemon生成時の設定が何か違うのでしょうか・・・。~
~
containerのIPアドレスは固定ではないのでこの方法は不安定です。container起動時にIPアドレスを指定する方法もありますが、なんかスマートじゃありませんよね。~
もうちょっとdocker理解したら、再度挑戦してみます。
#htmlinsert(twitterbutton.html)
RIGHT:Category: [[[Linux>日記/Category/Linux]]] - 06:59:03
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()