基础镜像
单播模式下检测效果
使用centos:6作为基础镜像,因为centos:7没有使用systemd作为系统服务管理工具.这在后面启动ganglia进程的时候会带来很多麻烦,但是有解决方案(由dockone社区微信群大神给出的解决方案,个人并未尝试):
使用supervisor来统一管理进行
runt管理进程
Dockerfile
FROM centos:6
MAINTAINER wlu wlu@linkernetworks.com
RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
RUN yum install -y php-common php-cli php-gb php
# install ganglia server
RUN yum install -y rrdtool rrdtool-devel ganglia-web ganglia-gmetad \
ganglia-gmond ganglia-gmond-python httpd apr-devel zlib-devel \
libconfuse-devel expat-devel pcre-devel
# install ganglia client
#RUN yum install -y ganglia-gmond
RUN mkdir -p /var/lib/ganglia && \
chown nobody:nobody /var/lib/ganglia && \
chmod 777 /var/lib/ganglia
ADD supervisord.conf /etc/supervisord.conf
RUN yum install -y python-setuptools && \
easy_install supervisor && \
yum clean all
RUN yum install -y vim && \
ln -f -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
注意:这里可以把多个指令合并以减少镜像层数
.
ganglia的配置
原理图:
ganglia可以监控整个集群的信息.这里有两个概念:
ganglia 中央机器...对应
gmetad
进程.对应配置信息在/etc/ganglia/gmetad.conf
(centos6下)ganglia client...对应
gmond
进程.对应配置信息在/etc/ganglia/gmond.conf
(centos6下)
有点类似于master和slave的关系.
在集群中需要有一个中央机器
来统一接收其它机器上收集到的监控信息(也可以包括中央机器自身),在这个中央机器上运行gmetad进程.
在其它机器上运行gmond进程,用来收集机器上的监控信息.
ganglia的两种模式
单播模式
这种模式下client上的数据会发送给中央机器,下面看下client(即gmond)的配置(只摘取部分需要的配置项):
gmond.conf
......
cluster {
name = "unspecified"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
......
udp_send_channel {
#bind_hostname = yes # Highly recommended, soon to be default.
# This option tells gmond to use a source address
# that resolves to the machine's hostname. Without
# this, the metrics may appear to come from any
# interface and the DNS names associated with
# those IPs will be used to create the RRDs.
mcast_join = 239.2.11.71
port = 8649
ttl = 1
}
......
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8649
bind = 239.2.11.71
retry_bind = true
# Size of the UDP buffer. If you are handling lots of metrics you really
# should bump it up to e.g. 10MB or even higher.
# buffer = 10485760
}
......
cluster name,这个必须指定并且相同集群使用相同的name
udp_send_channel,因为单播模式下各个client把数据以
udp
协议发给中央机器,所以需要配置中央机器的ip,配置后的结果:
udp_send_channel {
#bind_hostname = yes # Highly recommended, soon to be default.
# This option tells gmond to use a source address
# that resolves to the machine's hostname. Without
# this, the metrics may appear to come from any
# interface and the DNS names associated with
# those IPs will be used to create the RRDs.
#mcast_join = 239.2.11.71
host = host_ip
port = 8649
ttl = 1
}
这条需要注释:#mcast_join = 239.2.11.71,ganglia默认是多播
.
注释掉多播的配置:
udp_recv_channel {
#mcast_join = 239.2.11.71
port = 8649
#bind = 239.2.11.71
retry_bind = true
# Size of the UDP buffer. If you are handling lots of metrics you really
# should bump it up to e.g. 10MB or even higher.
# buffer = 10485760
}
note:这里注释掉多播和绑定的ip.我还不是太明白,详情参考这里
配置好后就可以通过service gmond start
来启动client上的gmond进程了.
gmetad.conf
data_source "my cluster" localhost
改为
data_source "your cluster name" host_ip #host_ip指中央机器的配置
配置好后就可以通过service gmetad start
来启动中央机器上的gmetad进程了.
多播模式
多播的特点:
集群中的每个client把自己的数据发送给集群中的其它client
中央机器指定一个client作为数据源.
个人觉得这种方式很浪费,因为单播模式下数据传输次数要少
参考连接
reference 1
reference 2
本项目对应的GitHub地址
httpd访问控制问题
ps
南京docker meetup已经于2015年3月份成立,将于2016年开始举办线下技术分享.诚挚欢迎各位对docker及容器技术感兴趣的同学加入Docker Nanjing meetup
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。