DockerHUB のイメージで JobScheduker + Zabbix + MariaDB のテスト環境をつくり、HyclopsJobMonitoring を試してみます。
Dockerホストは CentOS7 です。
今回は、docker-compose を使い、以下のようなコンテナを4つ起動します。
今回は、docker-compose を使い、以下のようなコンテナを4つ起動します。
・JobScheduler Master 1.10 (docker.io/floedermann/jobscheduler)
・MariaDB 10.1 (docker.io/mariadb)
・Zabbix Server 3.2 (docker.io/zabbix/zabbix-server-mysql)
・Zabbix Webインターフェース 3.2 (docker.io/zabbix/zabbix-web-nginx-mysql)
また、上記の各コンテナのタイムゾーンは、"Asia/Tokyo" で統一し、WEBインターフェースは日本語にします。
ディレクトリ構成
docker-conpose のプロジェクト名が sosjs10 となるようにしたいので、sosjs10 ディレクトリ以下にファイルを配置しました。
[root@centos0702 docker]# tree sosjs10 sosjs10 ├── docker-compose.yml ├── hyclops_jm-0.1.a │ ├── README.md │ ├── fabfile.py │ ├── hyclops_jm.conf │ ├── hyclops_jm_template.xml │ └── modules │ ├── live │ │ └── hyclops_jm │ │ ├── HyClops_JM_Trigger_Switch_Template.job_chain.xml │ │ ├── HyClops_JM_Trigger_ret.job.xml │ │ ├── HyClops_JM_Trigger_switch.job.xml │ │ ├── HyClops_JM_jobelapse.job.xml │ │ ├── HyClops_JM_sync.job.xml │ │ ├── target_zabbix_host.xml │ │ └── test_user_job.job.xml │ └── scripts │ ├── fabfile.py │ ├── hyclops_jm │ └── hyclops_jm_mail.sh └── initdb.d ├── init-js.sql └── init-zabbix.sql"hyclops_jm-0.1.a" は、TISのサイトからダウンロードした 0.1.0 を、今回使用するdocker 環境にあわせて修正したものです。
"initdb.d" には、MariaDB の初期設定用(DB、ユーザ作成)のスクリプトを配置しています。
MariaDBは、JobScheduler と Zabbix で使用します。
docker-compose の設定
docker-compose.yml は以下のとおり。
[root@centos0702 docker]# cat sosjs10/docker-compose.yml version: '2' services: js-master: image: floedermann/jobscheduler volumes: - ./data/sosjs/config:/opt/jobscheduler/data/scheduler/config - /etc/localtime:/etc/localtime:ro ports: - "4444:4444" - "40444:40444" environment: - MYSQL_PORT_3306_TCP_ADDR=sosjs10_db_1 - MYSQL_PORT_3306_TCP_PORT=3306 - MYSQL_ENV_MYSQL_USER=jobscheduler - MYSQL_ENV_MYSQL_PASSWORD=jobscheduler - MYSQL_ENV_MYSQL_DATABASE=jobscheduler depends_on: - db db: image: mariadb command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci volumes: - ./initdb.d:/docker-entrypoint-initdb.d - ./data/mysql:/var/lib/mysql - /etc/localtime:/etc/localtime:ro environment: MYSQL_ROOT_PASSWORD: p@ssw0rd zabbix-server: image: zabbix/zabbix-server-mysql:alpine-3.2-latest volumes: - ./data/zabbix:/var/lib/zabbix - /etc/localtime:/etc/localtime:ro environment: DB_SERVER_HOST: sosjs10_db_1 MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix ports: - "10051:10051" depends_on: - db zabbix-web: image: zabbix/zabbix-web-nginx-mysql:alpine-3.2-latest volumes: - /usr/share/fonts/ipa-pgothic/ipagp.ttf:/usr/share/zabbix/fonts/graphfont.ttf:ro environment: DB_SERVER_HOST: sosjs10_db_1 MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix ZBX_SERVER_HOST: sosjs10_zabbix-server_1 TZ: Asia/Tokyo ports: - "80:80" depends_on: - db - zabbix-server
"js-master" は、JobSchedulerコンテナです。
コンテナのタイムゾーンを、Dockerホストのタイムゾーン(Asia/Tokyo)に合わせるようにしています。また、JobScheduler の configディレクトリ をDockerホスト側で変更できるようにしています。
"db" は、MariaDBコンテナです。
コンテナのタイムゾーンを、Dockerホストのタイムゾーン(Asia/Tokyo)に合わせるようにしています。また、./init.d をコンテナの /docker-entrypoint-initdb.d にマウントすることで、初回起動時にスクリプトが実行されるようにしています。
"zabbix-server" は、ZabbixServerコンテナです。
コンテナのタイムゾーンを、Dockerホストのタイムゾーン(Asia/Tokyo)に合わせるようにしています。
"zabbix-web" は、Zabbix のWEBインターフェースです。
環境変数でタイムゾーン(Asia/Tokyo)を設定しています。
また、DockerホストのIPAフォントをコンテナにマウントして、Zabbixのグラフで日本語表示が文字化けしないようにしています。
Dockerホストには、以下のようにしてフォントをインストールしておきます。
コンテナのタイムゾーンを、Dockerホストのタイムゾーン(Asia/Tokyo)に合わせるようにしています。また、JobScheduler の configディレクトリ をDockerホスト側で変更できるようにしています。
"db" は、MariaDBコンテナです。
コンテナのタイムゾーンを、Dockerホストのタイムゾーン(Asia/Tokyo)に合わせるようにしています。また、./init.d をコンテナの /docker-entrypoint-initdb.d にマウントすることで、初回起動時にスクリプトが実行されるようにしています。
[root@centos0702 docker]# cat sosjs10/initdb.d/init-js.sql CREATE DATABASE jobscheduler; GRANT ALL PRIVILEGES ON jobscheduler.* TO 'jobscheduler'@'%' IDENTIFIED BY 'jobscheduler'; [root@centos0702 docker]# cat sosjs10/initdb.d/init-zabbix.sql CREATE DATABASE zabbix; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
"zabbix-server" は、ZabbixServerコンテナです。
コンテナのタイムゾーンを、Dockerホストのタイムゾーン(Asia/Tokyo)に合わせるようにしています。
"zabbix-web" は、Zabbix のWEBインターフェースです。
環境変数でタイムゾーン(Asia/Tokyo)を設定しています。
また、DockerホストのIPAフォントをコンテナにマウントして、Zabbixのグラフで日本語表示が文字化けしないようにしています。
Dockerホストには、以下のようにしてフォントをインストールしておきます。
[root@centos0702 docker]# yum install ipa-pgothic-fonts
コンテナの起動
sosjs10 ディレクトリに移動します。
コンテナのイメージをダウンロードして、ローカルのレポジトリを確認します。
[root@centos0702 sosjs10]# docker-compose pull [root@centos0702 sosjs10]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/mariadb latest 7eca0e0b51c9 4 weeks ago 393.4 MB docker.io/zabbix/zabbix-web-nginx-mysql alpine-3.2-latest 5e7f58ad9bec 8 weeks ago 174.1 MB docker.io/zabbix/zabbix-server-mysql alpine-3.2-latest 5f40f7fa997b 8 weeks ago 106.8 MB docker.io/floedermann/jobscheduler latest 58aaf95b6f91 9 weeks ago 837.8 MB
コンテナを起動します。
[root@centos0702 sosjs10]# docker-compose up -d Creating network "sosjs10_default" with the default driver Creating sosjs10_db_1 Creating sosjs10_js-master_1 Creating sosjs10_zabbix-server_1 Creating sosjs10_zabbix-web_1
Zabbix Webインターフェース の日本語化
Zabbix Webインターフェースの php.ini のタイムゾーンを Asia/Tokyo に変更します。
下図のように日本語表示になります。
[root@centos0702 sosjs10]# docker-compose exec zabbix-web sed -i 's|^\(date.timezone =\) .*$|\1 "Asia/Tokyo"|' /etc/php5/php.ini [root@centos0702 sosjs10]# docker-compose exec zabbix-web grep 'date.timezone' /etc/php5/php.ini ; http://php.net/date.timezone date.timezone = "Asia/Tokyo"コンテナを再起動します。
[root@centos0702 sosjs10]# docker-compose restart zabbix-web Restarting sosjs10_zabbix-web_1 ... doneブラウザで、下記URLにアクセスし、admin/zabbix でログインします。
http://<DockerホストのIPアドレス>/画面右上のヒト型アイコンをクリックして[ユーザプロファイル]を表示し、[言語]を"日本語" に変更します。
下図のように日本語表示になります。
Jobscheduler の日本語化
JobScheduler のJOCを日本語化します。
[root@centos0702 sosjs10]# sed -i "s/^\(_sos_lang = \)'';$/\1'ja';/" data/sosjs/config/operations_gui/custom.js [root@centos0702 sosjs10]# grep 'sos_lang' data/sosjs/config/operations_gui/custom.js * A language file scheduler_lang_[_sos_lang].js must exist. _sos_lang = 'ja';下記URLにアクセスすると、JOCが日本語で表示されます。
http://<DockerホストのIPアドレス>:4444/
ついでに、イベント機能も使用できるようにします。
[root@centos0702 sosjs10]# docker-compose exec js-master sed -i 's|^\( .*<entry key="jobEvents" value="\)off\("/>\)$|\1on\2|' /root/install/scheduler_install.xml
hyclops_jm 用にエラーメールが送信されるように設定します。
[root@centos0702 sosjs10]# docker-compose exec js-master sed -i 's|^\( .*<entry key="mailOnError" value="\)no\("/>\)$|\1yes\2|' /root/install/scheduler_install.xml [root@centos0702 sosjs10]# docker-compose exec js-master sed -i 's|^\( .*<entry key="mailServer" value="\)\("/>\)$|\1localhost\2|' /root/install/scheduler_install.xml [root@centos0702 sosjs10]# docker-compose exec js-master sed -i 's|^\( .*<entry key="mailFrom" value="\)\("/>\)$|\1root@localhost\2|' /root/install/scheduler_install.xml [root@centos0702 sosjs10]# docker-compose exec js-master sed -i 's|^\( .*<entry key="mailTo" value="\)\("/>\)$|\1hyclops_jm@localhost\2|' /root/install/scheduler_install.xml変更内容を確認します。
[root@centos0702 sosjs10]# docker-compose exec js-master egrep 'mail|Events' /root/install/scheduler_install.xml <entry key="mailServer" value="localhost"/> <entry key="mailPort" value="25"/> <entry key="mailFrom" value="root@localhost"/> <entry key="mailTo" value="hyclops_jm@localhost"/> <entry key="mailCc" value=""/> <entry key="mailBcc" value=""/> <com.izforge.izpack.panels.UserInputPanel id="email"> <entry key="mailOnError" value="yes"/> <entry key="mailOnWarning" value="no"/> <entry key="mailOnSuccess" value="no"/> <entry key="jobEvents" value="on"/>
JobSchedulerからのメールを受信できるように postfix をインストールします。
なお、デバッグ用に vim と rsyslog もインストールします。
なお、デバッグ用に vim と rsyslog もインストールします。
[root@centos0702 sosjs10]# docker-compose exec js-master apt-get update [root@centos0702 sosjs10]# docker-compose exec js-master apt-get install rsyslog vim postfixインストール中にpostfix の設定を聞かれるので、以下のように設定しました。
Postfix Configuration --------------------- Please select the mail server configuration type that best meets your needs. No configuration: Should be chosen to leave the current configuration unchanged. Internet site: Mail is sent and received directly using SMTP. Internet with smarthost: Mail is received directly using SMTP or by running a utility such as fetchmail. Outgoing mail is sent using a smarthost. Satellite system: All mail is sent to another machine, called a 'smarthost', for delivery. Local only: The only delivered mail is the mail for local users. There is no network. 1. No configuration 2. Internet Site 3. Internet with smarthost 4. Satellite system 5. Local only General type of mail configuration: 5 The "mail name" is the domain name used to "qualify" _ALL_ mail addresses without a domain name. This includes mail to and from <root>: please do not make your machine send out mail from root@example.org unless root@example.org has told you to. This name will also be used by other programs. It should be the single, fully qualified domain name (FQDN). Thus, if a mail address on the local host is foo@example.org, the correct value for this option would be example.org. System mail name: example.localコンテナ起動時に postfix と rsyslog が起動するようにします。
[root@centos0702 sosjs10]# docker-compose exec js-master vi /opt/startup_scheduler.sh
[root@centos0702 sosjs10]# docker-compose exec js-master tail /opt/startup_scheduler.sh
sed -i -e "s/{{DB_SERVER_USER}}/$DB_SERVER_USER/g" /root/install/scheduler_install.xml
sed -i -e "s/{{DB_SERVER_PASSWORD}}/$DB_SERVER_PASSWORD/g" /root/install/scheduler_install.xml
sed -i -e "s/{{DB_SERVER_DATABASE}}/$DB_SERVER_DATABASE/g" /root/install/scheduler_install.xml
(cd /root/install; ./setup.sh -u scheduler_install.xml)
/etc/init.d/rsyslog start
/etc/init.d/postfix start
sleep infinity
コンテナを再起動します。[root@centos0702 sosjs10]# docker-compose restart js-master Restarting sosjs10_js-master_1 ... doneコンテナのログを確認します。正常だと以下のように表示されます。
[root@centos0702 sosjs10]# docker-compose logs js-master 2>&1 | tail js-master_1 | libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd28ac7e000) js-master_1 | libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd28a8d3000) js-master_1 | libgcc_s.so.1 => /opt/jobscheduler/scheduler/lib/libgcc_s.so.1 (0x00007fd28a6bc000) js-master_1 | /lib64/ld-linux-x86-64.so.2 (0x00007fd28c0ef000) js-master_1 | Starting JobScheduler... js-master_1 | [ Processing finished ] js-master_1 | [ Writing the uninstaller data ... ] js-master_1 | [ Automated installation done ] js-master_1 | Starting enhanced syslogd: rsyslogd. js-master_1 | Starting Postfix Mail Transport Agent: postfix.
hyclops_jm の修正
今回のDocker環境にあわせて hycrops_jm を修正します。
hyclops_jm.conf は以下のようにしました。
PostgreSQL ではなく MariaDB 用にしています。
[root@centos0702 sosjs10]# cat hyclops_jm-0.1.a/hyclops_jm.conf # HyClops JobMonitoring user jm_user = hyclops_jm jm_passwd = hyclops_jm # JobScheduler configuration js_id = scheduler js_user = jobscheduler js_passwd = jobscheduler js_host = sosjs10_js-master_1 js_port = 4444 # Zabbix configuration zbx_server = sosjs10_zabbix-server_1 zbx_web = sosjs10_zabbix-web_1 zbx_login_user = Admin zbx_login_passwd = zabbix zbx_external_scripts_dir = /usr/lib/zabbix/externalscripts # Database super user db_user = root db_passwd = p@ssw0rd db_host = sosjs10_db_1 db_port = 3306インストール用の fabfile.py は以下のとおり。けっこう修正しました。
[root@centos0702 sosjs10]# cat hyclops_jm-0.1.a/fabfile.py #!/usr/bin/env python #-*- coding: utf-8 -* """ HyClop JobMonitoring install script Usage : fab -c hyclops_jm.conf install """ ############################################################# # Import modules and initial settings ############################################################# from fabric.api import lcd, cd, local, run, env, hide, sudo import sys, os, os.path, time, fnmatch #from datetime import datetime as dt #from datetime import datetime # local(コンテナ内)でコマンドを実行するのでコメントアウト。 #env.hosts = ['192.168.56.101'] #env.user = 'root' #env.password = 'p@ssw0rd' #============================================================ # private functions #============================================================ def _set_user(user, passwd): env.jm_user = user env.jm_passwd = passwd def _allow_error(): env.warn_only = True def _deny_error(): env.warn_only = False # JobSchedulerからメールを受信するユーザを作成する def _add_user(user, passwd): # Add hyclops jm user _allow_error() res = local('id %s' % user) _deny_error() if res.return_code != 0: local('useradd %s -p"%s"' %(user, passwd)) # root で JobScheduler を実行するのでsudo設定しない #def _sudo_to_user(user): # _allow_error() # res = local('grep %s /etc/sudoers || grep -r %s /etc/sudoers.d' % (user, user)) # _deny_error() # if res.return_code != 0: # local('echo "%s ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/%s' % (user, user)) # local('echo "Defaults:%s !requiretty,env_reset" >> /etc/sudoers.d/%s' % (user, user)) # # env.jm_user がメールを受信したらシェルを実行するように設定する def _setup_postfix(): _allow_error() res = local('grep %s /etc/aliases' % env.jm_user) _deny_error() if res.return_code != 0: local('echo "%s: | \\"/usr/local/sbin/hyclops_jm_mail.sh\\"" >> /etc/aliases' % env.jm_user) local('newaliases') # MariaDBにシステム情報を登録する def _setup_db(): sqls = ["CREATE TABLE sysinfo (name text,value text);", "CREATE TABLE jobid_tbl (job text,lastid text);", "GRANT ALL PRIVILEGES ON %s.* TO '%s'@'%%';" % (env.jm_user,env.js_user), "FLUSH PRIVILEGES;", "INSERT INTO sysinfo (name,value) VALUES ('jos_server','%s');" % env.js_host, "INSERT INTO sysinfo (name,value) VALUES ('jos_port','%s');" % env.js_port, "INSERT INTO sysinfo (name,value) VALUES ('zbx_server','%s');" % env.zbx_server, "INSERT INTO sysinfo (name,value) VALUES ('zbx_web','%s');" % env.zbx_web, "INSERT INTO sysinfo (name,value) VALUES ('zbx_login','%s');" % env.zbx_login_user, "INSERT INTO sysinfo (name,value) VALUES ('zbx_pass','%s');" % env.zbx_login_passwd, "INSERT INTO sysinfo (name,value) VALUES ('jos_timeout','3');"] mysql = "mysql --user=%s --password=%s --host=%s --port=%s -e" % (env.db_user, env.db_passwd, env.db_host, env.db_port) _allow_error() local("%s 'DROP DATABASE %s'" % (mysql, env.jm_user)) _deny_error() local("%s 'CREATE DATABASE %s'" % (mysql, env.jm_user)) for sql in sqls: mysql = "mysql --user=%s --password=%s --host=%s --port=%s --database=%s -e" % (env.db_user, env.db_passwd, env.db_host, env.db_port, env.jm_user) local("%s \"%s\"" % (mysql, sql)) # スクリプトを配置する。なお、環境に合わせて修正 def _setup_scripts(): tmpl_name = 'hyclops_jm_template.xml' log_dir = '/var/log/hyclops_jm' js_home = '/root' jm_home = "%s/hyclops_jm" % js_home js_data = "/opt/jobscheduler/data/%s" % env.js_id js_bin = "/opt/jobscheduler/%s/bin" % env.js_id local("mkdir -p %s" % log_dir) local("mkdir -p %s/live" % jm_home) local("cp %s %s/" % (tmpl_name, jm_home)) local("sed -e 's/HYCLOPS_JM_USER/%s/g' modules/scripts/fabfile.py > %s/fabfile.py" % (env.js_user, jm_home)) local("sed -i 's/HYCLOPS_JM_DB/%s/g' %s/fabfile.py" % (env.jm_user, jm_home)) local("sed -i 's/HYCLOPS_JM_PASSWORD/%s/g' %s/fabfile.py" % (env.js_passwd, jm_home)) local("sed -i 's/HYCLOPS_JM_HOST/%s/g' %s/fabfile.py" % (env.db_host, jm_home)) local("sed -i 's/HYCLOPS_JM_PORT/%s/g' %s/fabfile.py" % (env.db_port, jm_home)) local("chown -R %s:%s %s" % (env.js_user, env.js_user, log_dir)) local("chown -R %s:%s %s" % (env.js_user, env.js_user, jm_home)) local("sed -e 's|HYCLOPS_JM_HOME|%s|g' modules/scripts/hyclops_jm > /usr/local/sbin/hyclops_jm" % jm_home) local("sed -i 's|HYCLOPS_JS_BIN|%s|g' /usr/local/sbin/hyclops_jm" % js_bin) local("sed -e 's/HYCLOPS_ZBX_SERVER/%s/g' modules/scripts/hyclops_jm_mail.sh > /usr/local/sbin/hyclops_jm_mail.sh" % env.zbx_server) local("sed -i 's/HYCLOPS_JS_SERVER/%s/g' /usr/local/sbin/hyclops_jm_mail.sh" % env.js_host) local("chown %s:%s /usr/local/sbin/hyclops_jm*" % (env.js_user, env.js_user)) local("chmod +x /usr/local/sbin/hyclops_jm*") local("mkdir -p %s/config/live/hyclops_jm" % js_data) local("chown %s:%s %s/config/live/hyclops_jm" % (env.js_user, env.js_user, js_data)) files = local("cd modules; find live -type f", capture=True) for file in files.split('\n'): local("sed -e 's/HYCLOPS_JM_USER/%s/g' modules/%s > %s/config/%s" % (env.js_user, file, js_data, file)) local("sed -i 's|HYCLOPS_JS_BIN|%s|g' %s/config/%s" % (js_bin, js_data, file)) local("sed -i 's|HYCLOPS_JM_HOME|%s|g' %s/config/%s" % (jm_home, js_data, file)) # JobSchedulerでジョブが異常終了したらメール送信するように設定する # scheduler_install.xml で設定するので、以下は実行しない #def _setup_jobscheduler(): # js_data = "/opt/jobscheduler/data/%s" % (env.js_id) # # _allow_error() # res = local('grep %s %s/config/factory.ini' % (env.jm_user, js_data)) # _deny_error() # if res.return_code != 0: # current_mails = local('grep log_mail_to %s/config/factory.ini' % js_data) # local("sed -i 's/log_mail_to.*=/log_mail_to = %s@localhost,/g' %s/config/factory.ini" % (env.jm_user, js_data)) #============================================================ # public functions #============================================================ def install(user = 'hyclops_jm', passwd = 'hyclops_jm'): if 'js_user' not in env: print 'Usage: fab -c hyclops_jm.conf install' return False _deny_error() _set_user(user, passwd) _add_user(user, passwd) _add_user(env.js_user, env.js_passwd) # _sudo_to_user(env.js_user) _setup_postfix() # _setup_jobscheduler() _setup_db() _setup_scripts() print "================================================================" print "= Thank you for installing HyClops JM!! =" print "= You can monitor JobScheduler's job using Zabbix from now on. =" print "= Please access the Zabbix web interface and enjoy monitoring. =" print "= - example: http://your-domain/zabbix =" print "================================================================"hyclops_jm_template.xml は変更なしで使用します。
modules/live のジョブ定義はパスなどを修正しています。
オリジナルとの差分は以下のとおり。
[root@centos0702 sosjs10]# diff -r hyclops_jm-0.1.a/modules/live hyclops_jm-0.1.0/modules/live diff -r hyclops_jm-0.1.a/modules/live/hyclops_jm/HyClops_JM_Trigger_ret.job.xml hyclops_jm-0.1.0/modules/live/hyclops_jm/HyClops_JM_Trigger_ret.job.xml 8c8 < export JM_HOME="HYCLOPS_JM_HOME" --- > export JM_HOME="/home/scheduler/hyclops_jm" diff -r hyclops_jm-0.1.a/modules/live/hyclops_jm/HyClops_JM_Trigger_switch.job.xml hyclops_jm-0.1.0/modules/live/hyclops_jm/HyClops_JM_Trigger_switch.job.xml 19c19 < export JM_HOME="HYCLOPS_JM_HOME" --- > export JM_HOME="/home/scheduler/hyclops_jm" diff -r hyclops_jm-0.1.a/modules/live/hyclops_jm/HyClops_JM_sync.job.xml hyclops_jm-0.1.0/modules/live/hyclops_jm/HyClops_JM_sync.job.xml 9,10c9,10 < . HYCLOPS_JS_BIN/jobscheduler_environment_variables.sh < export JM_HOME="HYCLOPS_JM_HOME" --- > . /opt/sos-berlin.com/jobscheduler/HYCLOPS_JM_USER/bin/jobscheduler_environment_variables.sh > export JM_HOME="/home/HYCLOPS_JM_USER/hyclops_jm" diff -r hyclops_jm-0.1.a/modules/live/hyclops_jm/target_zabbix_host.xml hyclops_jm-0.1.0/modules/live/hyclops_jm/target_zabbix_host.xml 3c3 < <param name="zabbix_host" value="sosjs10_zabbix-server_1"/> --- > <param name="zabbix_host" value="localhost"/>modules/scripts も修正しています。
オリジナルとの差分は以下のとおり。
[root@centos0702 sosjs10]# diff -r hyclops_jm-0.1.a/modules/scripts hyclops_jm-0.1.0/modules/scripts diff -r hyclops_jm-0.1.a/modules/scripts/fabfile.py hyclops_jm-0.1.0/modules/scripts/fabfile.py 31,32c31,32 < from dateutil import parser < from pytz import timezone --- > from datetime import datetime as dt > from datetime import datetime 55,56c55,56 < # For MySQL < import MySQLdb --- > # For PostgreSQL > import psycopg2 66d65 < env.zbx_web="localhost" 72,76c71,75 < env.db_name='HYCLOPS_JM_DB' < env.db_user='HYCLOPS_JM_USER' < env.db_password='HYCLOPS_JM_PASSWORD' < env.db_host='HYCLOPS_JM_HOST' < env.db_port=HYCLOPS_JM_PORT --- > env.psqldatabase='hyclops_jm' > env.psqluser='HYCLOPS_JM_USER' > env.psqlpassword='HYCLOPS_JM_USER' > env.psqlhost='127.0.0.1' > env.psqlport=5432 129c128 < DBからシステム情報を取得 --- > PostgreSQLからシステム情報を取得 138,143c137,142 < connection = MySQLdb.connect( < db = env.db_name, < user = env.db_user, < passwd = env.db_password, < host = env.db_host, < port = env.db_port) --- > connection = psycopg2.connect( > database = env.psqldatabase, > user = env.psqluser, > password = env.psqlpassword, > host = env.psqlhost, > port = env.psqlport) 159,160d157 < elif row[0] == 'zbx_web': < env.zbx_web=row[1] 196,197c193,194 < webservice = httplib.HTTP("%s" % (env.zbx_web) ) < webservice.putrequest("POST", "/api_jsonrpc.php") --- > webservice = httplib.HTTP("%s" % (env.zbx_server) ) > webservice.putrequest("POST", "/zabbix/api_jsonrpc.php") 1290,1295c1287,1292 < connection = MySQLdb.connect( < db = env.db_name, < user = env.db_user, < passwd = env.db_password, < host = env.db_host, < port = env.db_port) --- > connection = psycopg2.connect( > database = env.psqldatabase, > user = env.psqluser, > password = env.psqlpassword, > host = env.psqlhost, > port = env.psqlport) 1363c1360,1361 < for e in root.findall('.//job'): # ジョブの情報を取得 --- > org_time = dt.strptime('1970-01-01 07:00:00','%Y-%m-%d %H:%M:%S') > for e in root.findall('answer/state/jobs/job/'): # ジョブの情報を取得 1381c1379 < for elem in root.findall('.//history.entry'): --- > for elem in root.findall('answer/history/history.entry/'): 1388,1389c1386,1387 < start_time = parser.parse(t).astimezone(timezone('Asia/Tokyo')) < start_time_ut = int(time.mktime(start_time.timetuple())) --- > start_time = dt.strptime(t, '%Y-%m-%dT%H:%M:%S.000Z') > start_time_ut = int(time.mktime(time.strptime(t, '%Y-%m-%dT%H:%M:%S.000Z'))) 1391,1392c1389,1390 < end_time = parser.parse(t).astimezone(timezone('Asia/Tokyo')) < end_time_ut = int(time.mktime(end_time.timetuple())) --- > end_time = dt.strptime(t, '%Y-%m-%dT%H:%M:%S.000Z') > end_time_ut = int(time.mktime(time.strptime(t, '%Y-%m-%dT%H:%M:%S.000Z'))) 1429c1427 < cmd ="echo '%s' | /usr/bin/zabbix_sender -z %s -T -i -" % ( "\n".join(elapses), env.zbx_server) --- > cmd ="echo -e '%s' | /usr/bin/zabbix_sender -z %s -T -i -" % ( "\n".join(elapses), env.zbx_server) diff -r hyclops_jm-0.1.a/modules/scripts/hyclops_jm hyclops_jm-0.1.0/modules/scripts/hyclops_jm 5,6c5,6 < . HYCLOPS_JS_BIN/jobscheduler_environment_variables.sh < export JM_HOME="HYCLOPS_JM_HOME" --- > . /opt/sos-berlin.com/jobscheduler/HYCLOPS_JM_USER/bin/jobscheduler_environment_variables.sh > export JM_HOME="/home/HYCLOPS_JM_USER/hyclops_jm" diff -r hyclops_jm-0.1.a/modules/scripts/hyclops_jm_mail.sh hyclops_jm-0.1.0/modules/scripts/hyclops_jm_mail.sh 4,5c4,5 < ZBX_HOST="HYCLOPS_ZBX_SERVER" < ZBX_NAME="HYCLOPS_JS_SERVER" --- > ZBX_HOST="127.0.0.1" > ZBX_NAME="localhost"主な修正ポイントは以下のとおり。
・MariaDB対応
・ZabbixServerとZabbixWebインターフェースにコンテナを分離したことへの対応
・Zabbix WebインターフェースのURLを変更
・JobSchedulerから取得したジョブ履歴の時間(UTC)を Asia/Tokyo に変換
・echo の "-e " を引数として認識しないので削除
hycrops_jm のインストール
上記で修正した hyclops_jm を JobSchedulerコンテナにコピーします。
[root@centos0702 sosjs10]# docker cp ./hyclops_jm-0.1.a sosjs10_js-master_1:/root/.hyclops_jm に必要なパッケージをインストールします。
[root@centos0702 sosjs10]# docker-compose exec js-master apt-get install fabric python-mysqldb mysql-client python-tz python-dateutilzabbix_sendarコマンド をインストールします。
[root@centos0702 sosjs10]# docker-compose exec js-master curl -L -o /root/zabbix-sender.deb http://repo.zabbix.com/zabbix/3.2/debian/pool/main/z/zabbix/zabbix-sender_3.2.0-1+jessie_amd64.deb % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 255k 100 255k 0 0 277k 0 --:--:-- --:--:-- --:--:-- 277k [root@centos0702 sosjs10]# docker-compose exec js-master dpkg -i /root/zabbix-sender.deb Selecting previously unselected package zabbix-sender. (Reading database ... 20493 files and directories currently installed.) Preparing to unpack /root/zabbix-sender.deb ... Unpacking zabbix-sender (1:3.2.0-1+jessie) ... Setting up zabbix-sender (1:3.2.0-1+jessie) ...hyclops_jm のインストールスクリプトを実行します。
[root@centos0702 sosjs10]# docker-compose exec js-master /bin/bash -c "cd /root/hyclops_jm-0.1.a ; fab -c hyclops_jm.conf install" [localhost] local: id hyclops_jm id: hyclops_jm: no such user Warning: local() encountered an error (return code 1) while executing 'id hyclops_jm' [localhost] local: useradd hyclops_jm -p"hyclops_jm" [localhost] local: id jobscheduler id: jobscheduler: no such user Warning: local() encountered an error (return code 1) while executing 'id jobscheduler' [localhost] local: useradd jobscheduler -p"jobscheduler" [localhost] local: grep hyclops_jm /etc/aliases Warning: local() encountered an error (return code 1) while executing 'grep hyclops_jm /etc/aliases' [localhost] local: echo "hyclops_jm: | \"/usr/local/sbin/hyclops_jm_mail.sh\"" >> /etc/aliases [localhost] local: newaliases [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 -e 'DROP DATABASE hyclops_jm' ERROR 1008 (HY000) at line 1: Can't drop database 'hyclops_jm'; database doesn't exist Warning: local() encountered an error (return code 1) while executing 'mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 -e 'DROP DATABASE hyclops_jm'' [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 -e 'CREATE DATABASE hyclops_jm' [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "CREATE TABLE sysinfo (name text,value text);" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "CREATE TABLE jobid_tbl (job text,lastid text);" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "GRANT ALL PRIVILEGES ON hyclops_jm.* TO 'jobscheduler'@'%';" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "FLUSH PRIVILEGES;" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "INSERT INTO sysinfo (name,value) VALUES ('jos_server','sosjs10_js-master_1');" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "INSERT INTO sysinfo (name,value) VALUES ('jos_port','4444');" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "INSERT INTO sysinfo (name,value) VALUES ('zbx_server','sosjs10_zabbix-server_1');" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "INSERT INTO sysinfo (name,value) VALUES ('zbx_web','sosjs10_zabbix-web_1');" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "INSERT INTO sysinfo (name,value) VALUES ('zbx_login','Admin');" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "INSERT INTO sysinfo (name,value) VALUES ('zbx_pass','zabbix');" [localhost] local: mysql --user=root --password=p@ssw0rd --host=sosjs10_db_1 --port=3306 --database=hyclops_jm -e "INSERT INTO sysinfo (name,value) VALUES ('jos_timeout','3');" [localhost] local: mkdir -p /var/log/hyclops_jm [localhost] local: mkdir -p /root/hyclops_jm/live [localhost] local: cp hyclops_jm_template.xml /root/hyclops_jm/ [localhost] local: sed -e 's/HYCLOPS_JM_USER/jobscheduler/g' modules/scripts/fabfile.py > /root/hyclops_jm/fabfile.py [localhost] local: sed -i 's/HYCLOPS_JM_DB/hyclops_jm/g' /root/hyclops_jm/fabfile.py [localhost] local: sed -i 's/HYCLOPS_JM_PASSWORD/jobscheduler/g' /root/hyclops_jm/fabfile.py [localhost] local: sed -i 's/HYCLOPS_JM_HOST/sosjs10_db_1/g' /root/hyclops_jm/fabfile.py [localhost] local: sed -i 's/HYCLOPS_JM_PORT/3306/g' /root/hyclops_jm/fabfile.py [localhost] local: chown -R jobscheduler:jobscheduler /var/log/hyclops_jm [localhost] local: chown -R jobscheduler:jobscheduler /root/hyclops_jm [localhost] local: sed -e 's|HYCLOPS_JM_HOME|/root/hyclops_jm|g' modules/scripts/hyclops_jm > /usr/local/sbin/hyclops_jm [localhost] local: sed -i 's|HYCLOPS_JS_BIN|/opt/jobscheduler/scheduler/bin|g' /usr/local/sbin/hyclops_jm [localhost] local: sed -e 's/HYCLOPS_ZBX_SERVER/sosjs10_zabbix-server_1/g' modules/scripts/hyclops_jm_mail.sh > /usr/local/sbin/hyclops_jm_mail.sh [localhost] local: sed -i 's/HYCLOPS_JS_SERVER/sosjs10_js-master_1/g' /usr/local/sbin/hyclops_jm_mail.sh [localhost] local: chown jobscheduler:jobscheduler /usr/local/sbin/hyclops_jm* [localhost] local: chmod +x /usr/local/sbin/hyclops_jm* [localhost] local: mkdir -p /opt/jobscheduler/data/scheduler/config/live/hyclops_jm [localhost] local: chown jobscheduler:jobscheduler /opt/jobscheduler/data/scheduler/config/live/hyclops_jm [localhost] local: cd modules; find live -type f [localhost] local: sed -e 's/HYCLOPS_JM_USER/jobscheduler/g' modules/live/hyclops_jm/HyClops_JM_Trigger_Switch_Template.job_chain.xml > /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_Switch_Template.job_chain.xml [localhost] local: sed -i 's|HYCLOPS_JS_BIN|/opt/jobscheduler/scheduler/bin|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_Switch_Template.job_chain.xml [localhost] local: sed -i 's|HYCLOPS_JM_HOME|/root/hyclops_jm|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_Switch_Template.job_chain.xml [localhost] local: sed -e 's/HYCLOPS_JM_USER/jobscheduler/g' modules/live/hyclops_jm/HyClops_JM_Trigger_ret.job.xml > /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_ret.job.xml [localhost] local: sed -i 's|HYCLOPS_JS_BIN|/opt/jobscheduler/scheduler/bin|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_ret.job.xml [localhost] local: sed -i 's|HYCLOPS_JM_HOME|/root/hyclops_jm|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_ret.job.xml [localhost] local: sed -e 's/HYCLOPS_JM_USER/jobscheduler/g' modules/live/hyclops_jm/HyClops_JM_Trigger_switch.job.xml > /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_switch.job.xml [localhost] local: sed -i 's|HYCLOPS_JS_BIN|/opt/jobscheduler/scheduler/bin|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_switch.job.xml [localhost] local: sed -i 's|HYCLOPS_JM_HOME|/root/hyclops_jm|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_Trigger_switch.job.xml [localhost] local: sed -e 's/HYCLOPS_JM_USER/jobscheduler/g' modules/live/hyclops_jm/HyClops_JM_jobelapse.job.xml > /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_jobelapse.job.xml [localhost] local: sed -i 's|HYCLOPS_JS_BIN|/opt/jobscheduler/scheduler/bin|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_jobelapse.job.xml [localhost] local: sed -i 's|HYCLOPS_JM_HOME|/root/hyclops_jm|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_jobelapse.job.xml [localhost] local: sed -e 's/HYCLOPS_JM_USER/jobscheduler/g' modules/live/hyclops_jm/HyClops_JM_sync.job.xml > /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_sync.job.xml [localhost] local: sed -i 's|HYCLOPS_JS_BIN|/opt/jobscheduler/scheduler/bin|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_sync.job.xml [localhost] local: sed -i 's|HYCLOPS_JM_HOME|/root/hyclops_jm|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/HyClops_JM_sync.job.xml [localhost] local: sed -e 's/HYCLOPS_JM_USER/jobscheduler/g' modules/live/hyclops_jm/target_zabbix_host.xml > /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/target_zabbix_host.xml [localhost] local: sed -i 's|HYCLOPS_JS_BIN|/opt/jobscheduler/scheduler/bin|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/target_zabbix_host.xml [localhost] local: sed -i 's|HYCLOPS_JM_HOME|/root/hyclops_jm|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/target_zabbix_host.xml [localhost] local: sed -e 's/HYCLOPS_JM_USER/jobscheduler/g' modules/live/hyclops_jm/test_user_job.job.xml > /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/test_user_job.job.xml [localhost] local: sed -i 's|HYCLOPS_JS_BIN|/opt/jobscheduler/scheduler/bin|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/test_user_job.job.xml [localhost] local: sed -i 's|HYCLOPS_JM_HOME|/root/hyclops_jm|g' /opt/jobscheduler/data/scheduler/config/live/hyclops_jm/test_user_job.job.xml ================================================================ = Thank you for installing HyClops JM!! = = You can monitor JobScheduler's job using Zabbix from now on. = = Please access the Zabbix web interface and enjoy monitoring. = = - example: http://your-domain/zabbix = ================================================================ Done.JOC を見ると、hyclops_jm のジョブが追加されているのがわかります。
Zabbix の画面で、[設定] > [ホスト] を見ると、JobScheduler のホスト名(sosjs10_js-master-1)が登録されています。
sosjs10_js-master_1 のIPアドレスが間違っているので修正します。
ホスト名をクリックすると、下図の画面になるので、[ホスト]名を入力して[DNS]を選択し、[更新]ボタンをクリックします。
hyclops_jm の動作確認(ジョブ実行時間)
ジョブの実行時間が Zabbix に記録されているか確認します。
[監視データ] > [最新データ] で遷移して、[ホスト]に "sosjs10_js-master_1" を入力し、[ヒストリがないアイテムを表示]のチェックを外して、[適用]ボタンをクリックします。
下図のようにジョブの一覧が表示されたら、実行時間が記録されています。
[グラフ]をクリックすると、ジョブの実行時間を下図のようにグラフで見ることができます。
hyclops_jm の動作確認(ジョブ異常終了の通知)
ジョブの異常終了がZabbixに通知されるか試します。
まず、異常終了するジョブを登録します。
[root@centos0702 sosjs10]# mkdir ./data/sosjs/config/live/test [root@centos0702 sosjs10]# vi ./data/sosjs/config/live/test/job01.job.xml [root@centos0702 sosjs10]# cat ./data/sosjs/config/live/test/job01.job.xml <?xml version="1.0" encoding="ISO-8859-1"?> <job order="no"> <script language="shell"> <![CDATA[ echo "error" exit 1 ]]> </script> <run_time /> </job>JOCで実行して、異常終了させます。
Zabbixの画面で、[監視データ] > [障害] を見ると、ジョブの異常終了が通知されていました。