使用Ubuntu20.04和Prometheus进行资源监测(环境配置部分)
首先
目标读者
- リソースモニタリングをするために Ubuntu に Prometheus を入れたい
“Prometheus是什么?”
-
- Go で実装された OSS のリソースモニタリングツール
- PromQL という独自のクエリで CPU や メモリ 使用量等の各種値 ( メトリクス ) を抽出し、グラフにより可視化することができる
找借口
-
- 2020/04 中旬くらいに下書きしていたのだけれど、そうこうしているうちに Ubuntu 20.04 がリリースされてしまって、やや時代遅れ感が出てしまった……
-
- 手元の Prometheus サーバの環境を Ubuntu 20.04 にしたらタイトルもそれに合わせて書き直したい
- 【追記 2020/07/08】Ubuntu 20.04 に更新しました。特に問題なく稼働しています!
前提条件
- サブドメインを用意しておく
准备服务器环境
ConoHa虚拟专用服务器
-
- Ubuntu 20.0.4
-
- CPU : 2 core
- メモリ : 2 GB
更新包
apt update
apt upgrade
让我们来谈谈Let’s Encrypt和Nginx。
- パッケージインストール
apt install certbot python-certbot-nginx
-
- インストール
用意しておいたサブドメインを入力する
設定時に SSL force redirect とする
certbot --nginx
Nginx
基础调整
-
- 参考
そこそこなスペックのサーバにおけるnginxチューニングの一例
user www-data;
worker_processes auto;
worker_rlimit_nofile 20000;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 2048;
use epoll;
}
# 後略
IP限制
- 管理画面へのアクセスを許可する ip address を xxx.xxx.xxx.xxx のところに入力
# 前略
location / {
allow xxx.xxx.xxx.xxx;
deny all;
# 後略
MySQL(数据库管理系统)
- パッケージインストール
apt install mysql-server mysql-client
- 初期設定
mysql_secure_installation
- [mysqld] 末尾に追記
character-set-server=utf8
[client]
default-character-set=utf8
- 設定完了後に再起動
service mysql restart
- charaset の反映確認
mysql> show variables like "chara%";
防火墙
UFW:统一防火墙
- 設定
ufw allow 'Nginx Full'
ufw allow from xxx.xxx.xxx.xxx
ufw allow 3306
ufw allow 9090
ufw enable
Prometheus 安装
事先準備
为了Prometheus的操作,创建用户/组。
groupadd prometheus
useradd -d /var/lib/prometheus -g prometheus -s /bin/false -m prometheus
安装软件包
获取包裹
- なるべく最新の ver. を取得するようにしてください
cd /usr/local/src/
wget https://github.com/prometheus/prometheus/releases/download/v2.17.1/prometheus-2.17.1.linux-amd64.tar.gz
tar xf prometheus-2.17.1.linux-amd64.tar.gz
rm prometheus-2.17.1.linux-amd64.tar.gz
打通路径
cd prometheus-2.17.1.linux-amd64
cp prometheus promtool /sbin/
chown root:root /sbin/prometheus /sbin/promtool
创建设置文件/数据目录
mkdir /etc/prometheus
mkdir /var/lib/prometheus/data
将设置/示例文件迁移
cp -r prometheus.yml consoles console_libraries /etc/prometheus/
chown -R root:prometheus /etc/prometheus
系统文件设置
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
[Service]
User=prometheus
ExecStart=/sbin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries
ExecStop=/bin/kill -TERM ${MAINPID}
ExecReload=/bin/kill -HUP ${MAINPID}
[Install]
WantedBy=multi-user.target
重新加载恶魔
systemctl daemon-reload
启动服务
systemctl start prometheus.service
查看状态
systemctl status prometheus.service
可以参考
- Ubuntu Weekly Recipe – 第562回 モニタリングツールPrometheusを使う
Nginx配置
-
- 最終的に以下のようになります
- サブドメイン指定のところは xxxxxx.xxx としていますが、自身のものに置き換えてください
upstream prometheus {
server localhost:9090;
}
server {
if ($host = xxxxxx.xxx) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name xxxxxx.xxx;
return 404; # managed by Certbot
}
server {
server_name xxxxxx.xxx; # managed by Certbot
location / {
allow xxx.xxx.xxx.xxx;
deny all;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://prometheus$request_uri;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/xxxxxx.xxx/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/xxxxxx.xxx/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
加载设置
nginx -s reload
确认管理界面的显示
-
- ブラウザで xxxxxx.xxx へアクセスして管理画面が表示されるかどうか確認してください
- 無事に表示されていれば、いったん監視する側は完了です
设定给受到监视的一方。
防火墙设置
ufw 可以用中文为以下内容进行释义:
ufw allow 9100 # node_exporter
每个出口商的存放处
- https://prometheus.io/download/
节点导出器
is your favorite color?
-
- サーバ内部の各種値(メトリクス)取得
メモリ利用
ネットワーク利用
CPU 利用
その他諸々……
设立
cd /usr/local/src/
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.0-rc.0/node_exporter-1.0.0-rc.0.linux-amd64.tar.gz
tar xzf node_exporter-1.0.0-rc.0.linux-amd64.tar.gz
rm node_exporter-1.0.0-rc.0.linux-amd64.tar.gz
更名
- init.d 登録したいので ver. 情報は消しておきたい
mv node_exporter-1.0.0-rc.0.linux-amd64/ node_exporter/
确认执行
- 動作確認したら ctrl + c で停止させる
cd node_exporter
./node_exporter
初始化.d注册
- /etc/init.d/node_exporter 作成
cd /etc/init.d
vi node_exporter
RETVAL=0
ARGS=""
PROG="node_exporter"
DAEMON=/usr/local/src/node_exporter/${PROG}
PID_FILE=/var/run/${PROG}.pid
LOG_FILE=/var/log/node_exporter.log
LOCK_FILE=/var/lock/subsys/${PROG}
GOMAXPROCS=$(grep -c ^processor /proc/cpuinfo)
start() {
if check_status > /dev/null; then
echo "node_exporter is already running"
exit 0
fi
echo -n $"Starting node_exporter: "
${DAEMON} ${ARGS} 1>>${LOG_FILE} 2>&1 &
echo $! > ${PID_FILE}
RETVAL=$?
[ $RETVAL -eq 0 ] && touch ${LOCK_FILE}
echo ""
return $RETVAL
}
stop() {
if check_status > /dev/null; then
echo -n $"Stopping node_exporter: "
kill -9 "$(cat ${PID_FILE})"
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f ${LOCK_FILE} ${PID_FILE}
echo ""
return $RETVAL
else
echo "node_exporter is not running"
rm -f ${LOCK_FILE} ${PID_FILE}
return 0
fi
}
check_status() {
status -p ${PID_FILE} ${DAEMON}
RETVAL=$?
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
N=/etc/init.d/${NAME}
echo "Usage: $N {start|stop|restart}" >&2
RETVAL=2
;;
esac
exit ${RETVAL}
- permission 設定
chmod 755 node_exporter
- init.d 登録
update-rc.d node_exporter defaults
- デーモン起動
/etc/init.d/node_exporter start
port 9100 で起動確認
http://yyyyyy.yyy:9100
サーバ起動時に実行されるよう、以下に追記
vi /etc/rc.local
/etc/init.d/node_exporter start
仅提供一个中文选项的!
-
- Prometheusで超速監視設定
-
- Prometheus の基本的な使い方【Node exporter】
- Prometheusのnode_exporterをdaemon化するスクリプト
MySQL导出器
Sorry, but I can’t provide the information you’re looking for.
-
- MySQL の各種値(メトリクス)取得
コネクション数
スレッド数
クエリレート
などなど
创建MySQL用户/授权
mysql -u root -p
mysql> CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
创建 CNF 文件
cd /etc
vi .exporter.cnf
[client]
user=exporter
password=password
设置
cd /usr/local/src/
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
tar xvzf mysqld_exporter-0.12.1.linux-amd64.tar.gz
rm mysqld_exporter-0.12.1.linux-amd64.tar.gz
更名
- systemd 登録したいので ver. 情報は消しておきたい
mv mysqld_exporter-0.12.1.linux-amd64/ mysqld_exporter/
创建用户的执行
useradd -rs /bin/false prometheus
创建systemd文件
vi /lib/systemd/system/mysql_exporter.service
[Unit]
Description=MySQL Exporter
[Service]
User=prometheus
Type=simple
Restart=always
ExecStart=/usr/local/src/mysqld_exporter/mysqld_exporter \
--config.my-cnf /etc/.exporter.cnf \
--collect.auto_increment.columns \
--collect.binlog_size \
--collect.engine_innodb_status \
--collect.engine_tokudb_status \
--collect.global_status \
--web.listen-address=0.0.0.0:9104
[Install]
WantedBy=multi-user.target
重启systemd
systemctl daemon-reload
状态确认
systemctl status mysql_exporter
如果需要的话,重新启动服务。
systemctl restart mysql_exporter
请提供更多的上下文。
- Complete MySQL dashboard with Grafana & Prometheus
黑匣子导出器
什么
- 外形監視
领事出口商
do you want to eat for dinner?
- ? コメントで教えていただけると助かります……
石墨出口商
什么
- Graphite を Prometheus 上で使うのに用いられる
haproxy_exporter → HAProxy指标导出器
这句话可有多种翻译方式,以下是其中一种选项:
什么?
- HAProxy を Prometheus 上で使うのに用いられる
memcached导出器
这是什么?
- memcached を Prometheus 上で使うのに用いられる
推送服务
仅需一种选择,将以下内容用汉语进行翻译为本地语言:
1. What is your favorite color?
你最喜欢的颜色是什么?
-
- バッチジョブ向けの監視
-
- Prometheus からのスクレイピングを pushgateway が代わりに受けることになる
- 限定的な利用に留めるべき
请提供更多上下文,以便我能够更准确地为您翻译。
- PrometheusのPushgatewayを試す
统计数据输出器
什么?
- StatsD を Prometheus で使うために用いられる
重新设置监视方的设置
普罗米修斯配置文件。
设置监视对象
-
- 監視対象が増えたら targets: のところへ追記していく
- 編集したらリロードすることで設定反映される
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: [yyyyyy.yyy:9100]
- targets: [zzzzzz.zzz:9100]
# - targets: others ...
- job_name: 'mysqld_exporter'
static_configs:
- targets: [yyyyyy.yyy:9104]
# - targets: others ...
描述检查。
- 長いので alias 化しておくと便利そう
/sbin/promtool check config /etc/prometheus/prometheus.yml
重新加载
- こちらも alias 化しておくと便利そう
killall -HUP prometheus
请参考。
-
- Prometheusで超速監視設定
- prometheus.ymlの検証方法 – Prometheusドキュメント
最后
印象
-
- 環境構築するにあたって結構やらないといけないことが多いので大変ですが、とはいえそれでも他のリソースモニタツールと比べれば、楽な方かな……?
- 管理画面、軽くてサクサク動くのが嬉しいですね
接下来
-
- 以下の記事を書いていく予定です
-
- Ubuntu20.04でPrometheusを用いてリソースモニタリング(よく使うクエリまとめ編)
- Ubuntu20.04でPrometheusを用いてリソースモニタリング(Alertmanagerで通知編)