用Prometheus来监控Apache(使用apache_exporter)
前言
尽管在Prometheus上配置了node_exporter,但服务器并不只有这一个选项。
我们还需要监控正在运行的内容!因此,这次我们将介绍apache_exporter。
在Docker宿主机上执行的命令是#,
在Docker容器中执行的命令是##。
请注意,根据位置不同,文件中的注释可能以#形式进行标记。
我尝试使用jecnua/apache-exporter来启动容器,但似乎无法运行…
所以,我将尝试使用我在本次发布中提到的方法进行监控。
环境
我在Azure上创建的虚拟机(VM)上安装了Docker。具体如下:
– Docker主机:CentOS7.3
– 容器:使用最新的CentOS镜像
– 用于监控的容器:安装了prometheus监控工具
– 监控目标服务器:运行Apache的容器
准备
在运行 Apache 的受监视容器中安装 Go 语言。
<Apache稼働コンテナ>
## yum -y install golang git ★ インストール!
## export GOPATH=$HOME/go
## export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
安装apache_exporter。
从GitHub中进行安装。
<Apache稼働コンテナ>
## go get github.com/neezgee/apache_exporter ★ 何も出力はありません。環境変数GOPATHにインストールされます。
## mv $HOME/go /usr/local/src/. ★ これは好き好きです。実施しなくてもいいです。
## ln -fs /usr/local/src/go/bin/apache_exporter /usr/bin
自动启动设置
让apache_exporter在已启动的Apache容器上启动。
<Apache稼働コンテナ>
## vi /usr/lib/systemd/system/apache_exporter.service
[Unit]
Description=Apache Exporter
[Service]
Type=simple
ExecStart=/usr/local/src/go/bin/apache_exporter
PrivateTmp=false
[Install]
WantedBy=multi-user.target
## systemctl enable apache_exporter.service ★ 登録!
Created symlink from /etc/systemd/system/multi-user.target.wants/apache_exporter.service to /usr/lib/systemd/system/apache_exporter.service.
## systemctl start apache_exporter
请将警报规则登记。
<prometheus導入コンテナ>
## vi /etc/prometheus/alert.rules ★ ルールファイルは、それぞれの環境で読み替えてください。
(略)
ALERT httpd_down ★ 丸っとコピーして追記ください。
IF apache_up == 0
ANNOTATIONS {
summary = "Apache Daemon {{ $labels.instance }} down",
description = "Apache Daemon is dead.", ★ 文字列は好きな文字列に変更ください。
}
(略)
## systemctl restart alertmanager ★ 一応、Alertmanager を再起動
请在Prometheus上进行注册
在Prometheus(服务器端)的监控设置中添加作业。
<prometheus導入コンテナ>
## vi /etc/prometheus/prometheus.yml
(略)
scrape_configs:
- job_name: 'apache'
scrape_interval: 5s
static_configs:
- targets: ['<Apache導入コンテナのIP or URL>:9117']
(略)
## systemctl restart prometheus ★ prometheus を再起動
最终
请确保提交(commit)并打开9117端口。
<Apache稼働コンテナ>
## exit
<Apache起動コンテナのDockerホスト>
# docker commit <コンテナ名> <イメージ名> ★ ちゃんとcommit しておきましょう。
# docker stop <コンテナ名>
# docker rm <コンテナ名>
# docker run --privileged --name <コンテナ名> -dt -v <DockerホストDir>:<コンテナDir> -p 80:80 -p 9117:9117 <イメージ名> /sbin/init