使用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で通知編)
广告
将在 10 秒后关闭
bannerAds