1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

2022年にCloudforecastを導入する

Last updated at Posted at 2022-02-10

はじめに

リソース監視ツールのCloudforecastは便利なのですが、導入手順のドキュメントがいまいち整備されていないので個人的にメモ。

諸要素

CentOS 9 Stream
System Perl
Gearman
Nginx

※ネタバレですが、Perlbrewで入れたPerlで導入しようとするとSNMPモジュールのインストールでコケます。
諦めてSystem Perlを使って導入しましょう。

パッケージの導入

dnf update
dnf install perl perl-core
curl -L https://cpanmin.us | perl - App::cpanminus
dnf install rrdtool rrdtool-perl
dnf install net-snmp net-snmp-utils
dnf install net-snmp-perl
dnf install git
dnf install nginx
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
dnf config-manager --set-enabled crb
dnf install gearmand

実行ユーザーの作成〜各種ファイル作成

useradd cloudforecast
su - cloudforecast
snmpwalk -v 2c -c ExAmplEcOmmUnIty 192.168.x.x system
chmod 755 /home/cloudforecast
mkdir git
cd git
git clone https://github.com/kazeburo/cloudforecast.git
mkdir ~/appli
cd ~/appli
mkdir data
ln -s /home/cloudforecast/git/cloudforecast/inc
ln -s /home/cloudforecast/git/cloudforecast/lib
ln -s /home/cloudforecast/git/cloudforecast/t
ln -s /home/cloudforecast/git/cloudforecast/Makefile.PL 
ln -s /home/cloudforecast/git/cloudforecast/cf_devstarter 
ln -s /home/cloudforecast/git/cloudforecast/cf_fetcher_worker 
ln -s /home/cloudforecast/git/cloudforecast/cf_updater_worker 
ln -s /home/cloudforecast/git/cloudforecast/cloudforecast_radar 
ln -s /home/cloudforecast/git/cloudforecast/cloudforecast_web 
mkdir host_config
cd host_config/
cp /home/cloudforecast/git/cloudforecast/host_config/* ./
cd ~/appli
cloudforecast.yaml
---
config:
  gearman_enable: 1
  gearman_server:
    host: localhost
    port: 4730
  data_dir: data
  host_config_dir: host_config

component_config:
  SNMP:
    community: ExAmplEcOmmUnIty
    version: 2c

※Cloudforecastが作られた当時のものから、Gearmanのポートが変わっているので注意。

server_list.yaml
--- #Dev
servers:
  - config: basic.yaml
    hosts:
      - 192.168.x.x sample sample system
cpanm -v -n -L extlib --installdeps .
mkdir service
cd service
radar.sh
#!/bin/sh
export HOME=/home/cloudforecast
export USER=cloudforecast
export LANG=C
export CF_DEBUG=1

cd ~/appli
./cloudforecast_radar -r -c cloudforecast.yaml -l server_list.yaml
web.sh
#!/bin/sh
export HOME=/home/cloudforecast
export USER=cloudforecast
export LANG=C
export CF_DEBUG=1

cd ~/appli
./cloudforecast_web -p 5000 -c cloudforecast.yaml -l server_list.yaml
fetcher.sh
#!/bin/sh
export HOME=/home/cloudforecast
export USER=cloudforecast
export LANG=C
export CF_DEBUG=1

cd ~/appli
./cf_fetcher_worker -c cloudforecast.yaml -max-workers 2 -max-request-per-child 100 -max-exection-time 60
updater.sh
#!/bin/sh
export HOME=/home/cloudforecast
export USER=cloudforecast
export LANG=C
export CF_DEBUG=1

cd ~/appli
./cf_updater_worker -c cloudforecast.yaml -max-workers 2 -max-request-per-child 100 -max-exection-time 60

LANG=Cがないと場合によってはフォントがなくてグラフが文字化けする(OS言語設定を日本語にしているなどの場合)
CF_DEBUG=1はデバッグログ出力フラグなので、必要に応じて削除。

cloudforecast_radar.service
[Unit]
Description=Cloudforecast Radar Service

[Service]
Type=simple
User=cloudforecast
ExecStart=/home/cloudforecast/appli/service/radar.sh
TimeoutStopSec=10
KillMode=mixed
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target
clouudforecast_web.service
[Unit]
Description=Cloudforecast Web Service

[Service]
Type=simple
User=cloudforecast
ExecStart=/home/cloudforecast/appli/service/web.sh
TimeoutStopSec=10
KillMode=mixed
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target
cloudforecast_fetcher.service
[Unit]
Description=Cloudforecast Fetcher Service

[Service]
Type=simple
User=cloudforecast
ExecStart=/home/cloudforecast/appli/service/fetcher.sh
TimeoutStopSec=10
KillMode=mixed
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target
cloudforecast_updater.service
[Unit]
Description=Cloudforecast Updater Service

[Service]
Type=simple
User=cloudforecast
ExecStart=/home/cloudforecast/appli/service/updater.sh
TimeoutStopSec=10
KillMode=mixed
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target
chmod 755 *.sh
cd ~/appli
mkdir nginx
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;

        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }

        location ^~ /static/ {
            root   /home/cloudforecast/App/htdocs;
            expires -1;
        }

        location / {
            proxy_pass http://127.0.0.1:5000;
        }
    }
}

※proxy_set_headerの部分とlocation設定の部分以外は環境に合わせて自由に組み替えて良い(はず)

cd /usr/lib/systemd/system/
ln -s /home/cloudforecast/appli/service/cloudforecast_radar.service
ln -s /home/cloudforecast/appli/service/cloudforecast_web.service
ln -s /home/cloudforecast/appli/service/cloudforecast_fetcher.service
ln -s /home/cloudforecast/appli/service/cloudforecast_updater.service
cd /etc/nginx
mv nginx.conf nginx.conf_
ln -s /home/cloudforecast/appli/nginx/nginx.conf
setenforce permissive
/etc/selinux/config
SELINUX=permissive

※本当はSELinux無効化ではなくて、Nginx設定ファイルのシンボリックリンクを辿れるようにするのが良い。

サービス起動

nginx -t
systemctl enable nginx
systemctl start nginx
systemctl enable gearmand
systemctl start gearmand
systemctl enable cloudforecast_radar
systemctl enable cloudforecast_web
systemctl enable cloudforecast_fetcher
systemctl enable cloudforecast_updater
systemctl start cloudforecast_radar
systemctl start cloudforecast_web
systemctl start cloudforecast_fetcher
systemctl start cloudforecast_updater
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?