Last active
June 14, 2023 15:44
-
-
Save akira345/f324289af4fd0d204dd42fab09c308ab to your computer and use it in GitHub Desktop.
zabbix-serverを構築するdocker-compose.ymlサンプル。パスワードとかは適当に変えること。docker-proxyを使用しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# | |
require 'file-tail' | |
require 'systemu' | |
# DockerホストをゲストのZabbixServerコンテナで監視する場合、サーバ再起動時やDocker再起動時IPが変わってしまい、Agentの接続が蹴られてしまいます。 | |
# 本スクリプトは、DockerホストのZabbixAgentのログを監視し、接続拒否されたIPを正しいIPに修正してAgentを再起動します。 | |
# RootユーザのCronに以下のように設定して、サーバ再起動時に起動、常駐するようにします。 | |
# | |
# @reboot /usr/bin/ruby /opt/foo/docker/zabbix/chg_agent_ip.rb >> /opt/foo/docker/zabbix/chgip.log | |
# 本スクリプトは、file-tailとsystemuのGemが必要です。別途インストールしてください。 | |
# | |
# 検証環境 | |
# Ubuntu 18.04.2 | |
# Ruby 2.5.1p57 | |
# | |
ZABBIX_AGENT_LOG = "/var/log/zabbix/zabbix_agentd.log" | |
ZABBIX_AGENT_CONF = "/etc/zabbix/zabbix_agentd.conf" | |
MATCH_KEY = " \\d{1,}:\\d{1,}:\\d{1,}\\.\\d{1,} failed to accept an incoming connection: connection from \"(\\d{1,}\\.\\d{1,}\\.\\d{1,}\\.\\d{1,})\" rejected, allowed hosts: \"(\\d{1,}\\.\\d{1,}\\.\\d{1,}\\.\\d{1,})\"" | |
def chg_ip_and_restart_zabbix_agent(before_ip,after_ip) | |
puts "exec cmd : " | |
cmd = "/bin/sed -i -e \"s/#{before_ip}/#{after_ip}/g\" #{ZABBIX_AGENT_CONF}" | |
puts cmd | |
status, stdout, stderr = systemu cmd | |
puts [status,stdout,stderr] | |
cmd = "/bin/systemctl restart zabbix-agent.service" | |
puts cmd | |
status, stdout, stderr = systemu cmd | |
puts [status,stdout,stderr] | |
puts "end" | |
end | |
@before_ip = nil | |
@after_ip = nil | |
class ACCESS_DENY < StandardError; end | |
def chk_logfile | |
begin | |
File.open(ZABBIX_AGENT_LOG) do |log| | |
log.extend(File::Tail) | |
log.interval = 1 | |
log.backward(0) | |
log.tail do |line| | |
puts line | |
if ip = line.match(/#{MATCH_KEY}/) | |
puts "match!" | |
@before_ip = ip[2] | |
@after_ip = ip[1] | |
puts "before_ip:#{@before_ip} after_ip:#{@after_ip}" | |
raise ACCESS_DENY | |
end | |
end | |
end | |
rescue Errno::EACCES | |
puts "Need to run ROOT User!" | |
rescue ACCESS_DENY | |
chg_ip_and_restart_zabbix_agent(@before_ip,@after_ip) | |
chk_logfile | |
end | |
end | |
# main | |
chk_logfile |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/bin/bash | |
# | |
# Cronで動かすときはPATHを設定すること。 | |
# | |
get_contenner_service_name(){ | |
echo $1 | cut -d"_" -f2- | rev | cut -c 3- | rev | |
} | |
mysql_contenner_backup(){ | |
target_contenner=$1 | |
mysql_contenner_service_name=`get_contenner_service_name ${target_contenner}` | |
mysql_dump_name=${mysql_contenner_service_name}_dumpall.sql | |
echo "MySQLバックアップ開始:${mysql_contenner_service_name}" | |
docker exec -i ${target_contenner} /bin/sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > ${backup_dir}/${mysql_dump_name} | |
if [ $? -ne 0 -o ! -e ${backup_dir}/${mysql_dump_name} -o ! -s ${backup_dir}/${mysql_dump_name} ]; then | |
echo "mysqlバックアップに失敗:${mysql_contenner_service_name}" | |
exit 1 | |
fi | |
echo "MySQLバックアップ終了:${mysql_contenner_service_name}" | |
} | |
pgsql_contenner_backup(){ | |
target_contenner=$1 | |
pgsql_contenner_service_name=`get_contenner_service_name ${target_contenner}` | |
pgsql_dump_name=${pgsql_contenner_service_name}_dumpall.sql | |
echo "PostgreSQLバックアップ開始:${pgsql_contenner_service_name}" | |
docker exec -i ${target_contenner} /bin/sh -c 'pg_dumpall -U $POSTGRES_USER' > ${backup_dir}/${pgsql_dump_name} | |
if [ $? -ne 0 -o ! -e ${backup_dir}/${pgsql_dump_name} -o ! -s ${backup_dir}/${pgsql_dump_name} ]; then | |
echo "postgresqlバックアップに失敗:${pgsql_contenner_service_name}" | |
exit 1 | |
fi | |
echo "PostgreSQLバックアップ終了:${pgsql_contenner_service_name}" | |
} | |
contenner_backup(){ | |
target_contenner=$1 | |
target_contenner_service_name=`get_contenner_service_name ${target_contenner}` | |
echo "Dockerコンテナ終了:${target_contenner_service_name}" | |
docker-compose stop ${target_contenner_service_name} | |
if [ $? -ne 0 ]; then | |
echo "Dockerコンテナ終了に失敗:${target_contenner_service_name}" | |
exit 1 | |
fi | |
docker run --rm --volumes-from ${target_contenner} -v ${backup_dir}:/backup -e TAR_OPTS="--verbose" akira345/docker-backup backup ${target_contenner}.tar.xz | |
if [ $? -ne 0 ]; then | |
echo "Dockerコンテナバックアップに失敗:${target_contenner_serivce_name}" | |
exit 1 | |
fi | |
echo "Dockerコンテナ起動:${target_contenner_service_name}" | |
docker-compose start ${target_contenner_service_name} | |
} | |
target_contenners=$(docker-compose ps | tail -n +3 | cut -d " " -f1) | |
backup_dir=$(pwd)/backup | |
mkdir -p ${backup_dir} | |
echo ${target_contenners} | |
echo "start : `date +'%Y/%m/%d %H:%M:%S'`" | |
if [ -n "${target_contenners}" ]; then | |
echo "バックアップ開始" | |
for target_contenner in ${target_contenners}; | |
do | |
#PostgreSQL、MySQLコンテナ名に一致するように修正すること | |
if [[ ${target_contenner} =~ pgsql|postgresql ]]; then | |
pgsql_contenner_backup ${target_contenner} | |
elif [[ ${target_contenner} =~ mysql ]]; then | |
mysql_contenner_backup ${target_contenner} | |
else | |
contenner_backup ${target_contenner} | |
fi | |
done | |
echo "END" | |
fi | |
echo "end : `date +'%Y/%m/%d %H:%M:%S'`" | |
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM zabbix/zabbix-web-apache-pgsql:ubuntu-latest | |
USER root | |
RUN apt-get clean && apt-get update && \ | |
apt-get -y install fonts-ipafont && \ | |
rm -f /etc/alternatives/zabbix-frontend-font && \ | |
rm -f /usr/share/zabbix/assets/fonts/DejaVuSans.ttf && \ | |
update-alternatives --install /usr/share/zabbix/assets/fonts/DejaVuSans.ttf zabbix-frontend-font /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf 50 && \ | |
update-alternatives --set zabbix-frontend-font /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf && \ | |
chown -R www-data:www-data /usr/share/zabbix/assets/ && \ | |
chmod -R 744 /usr/share/zabbix/assets && \ | |
rm -rf /var/lib/apt/lists/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# DB Version: 13 | |
# OS Type: linux | |
# DB Type: dw | |
# Total Memory (RAM): 2 GB | |
# CPUs num: 2 | |
# Connections num: 100 | |
# Data Storage: ssd | |
max_connections = 100 | |
shared_buffers = 512MB | |
effective_cache_size = 1536MB | |
maintenance_work_mem = 256MB | |
checkpoint_completion_target = 0.9 | |
wal_buffers = 16MB | |
default_statistics_target = 500 | |
random_page_cost = 1.1 | |
effective_io_concurrency = 200 | |
work_mem = 2621kB | |
min_wal_size = 4GB | |
max_wal_size = 16GB | |
max_worker_processes = 2 | |
max_parallel_workers_per_gather = 1 | |
max_parallel_workers = 2 | |
max_parallel_maintenance_workers = 1 | |
listen_addresses = '*' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version: '2' | |
# proxy | |
services: | |
proxy: | |
image: jwilder/nginx-proxy | |
container_name: nginx-proxy | |
ports: | |
- "80:80" | |
volumes: | |
- /var/run/docker.sock:/tmp/docker.sock:ro | |
restart: always | |
networks: | |
default: | |
external: | |
name: common_link |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version: '2' | |
volumes: | |
zabbix_mysql_data: | |
driver: local | |
services: | |
# zabbix_mysql | |
zabbix_mysql: | |
restart: always | |
image: mysql:8 | |
volumes: | |
- zabbix_mysql_data:/var/lib/mysql | |
- ./zabbix_mysql/conf:/etc/mysql/conf.d | |
environment: | |
MYSQL_ROOT_PASSWORD: passwd | |
MYSQL_USER: zabbix | |
MYSQL_PASSWORD: zabbix | |
MYSQL_DATABASE: zabbix | |
# zabbix | |
zabbix-server: | |
restart: always | |
image: zabbix/zabbix-server-mysql:latest | |
volumes: | |
- /etc/localtime:/etc/localtime:ro | |
- /etc/timezone:/etc/timezone:ro | |
depends_on: | |
- zabbix_mysql | |
environment: | |
DB_SERVER_HOST: zabbix_mysql | |
MYSQL_DATABASE: zabbix | |
MYSQL_USER: zabbix | |
MYSQL_PASSWORD: zabbix | |
ports: | |
- "10051:10051" | |
links: | |
- zabbix_mysql:mysql | |
zabbix-web: | |
restart: always | |
image: zabbix/zabbix-web-apache-mysql:latest | |
depends_on: | |
- zabbix-server | |
- zabbix_mysql | |
environment: | |
DB_SERVER_HOST: zabbix_mysql | |
MYSQL_DATABASE: zabbix | |
MYSQL_USER: zabbix | |
MYSQL_PASSWORD: zabbix | |
PHP_TZ: Asia/Tokyo | |
ZBX_SERVER_HOST: zabbix-server | |
ZBX_SERVER_PORT: 10051 | |
ZBX_SERVER_NAME: zabbix3.example.com | |
VIRTUAL_HOST: zabbix3.example.com | |
VIRTUAL_PORT: 80 | |
links: | |
- zabbix_mysql:mysql | |
- zabbix-server:zabbix-server | |
networks: | |
default: | |
external: | |
name: common_link |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version: '2' | |
volumes: | |
zabbix_pgsql_data: | |
driver: local | |
zabbix_server_mib: | |
driver: local | |
services: | |
# zabbix_pgsql | |
zabbix_pgsql: | |
restart: always | |
image: postgres:14 | |
volumes: | |
- zabbix_pgsql_data:/var/lib/postgresql/data | |
- ./pgsql.conf:/etc/postgresql/postgresql.conf | |
environment: | |
POSTGRES_PASSWORD: passwd | |
POSTGRES_USER: zabbix | |
POSTGRES_DB: zabbix | |
POSTGRES_INITDB_ARGS: --encoding=UTF-8 --locale=C | |
command: 'postgres -c config_file="/etc/postgresql/postgresql.conf"' | |
# zabbix | |
zabbix-server: | |
restart: always | |
image: zabbix/zabbix-server-pgsql:latest | |
volumes: | |
- /etc/localtime:/etc/localtime:ro | |
- /etc/timezone:/etc/timezone:ro | |
- zabbix_server_mib:/var/lib/zabbix/mibs | |
depends_on: | |
- zabbix_pgsql | |
environment: | |
DB_SERVER_HOST: zabbix_pgsql | |
POSTGRES_DB: zabbix | |
POSTGRES_USER: zabbix | |
POSTGRES_PASSWORD: passwd | |
ports: | |
- "10051:10051" | |
links: | |
- zabbix_pgsql:zabbix_pgsql | |
zabbix-web: | |
restart: always | |
image: zabbix/zabbix-web-apache-pgsql:ubuntu-latest | |
build: . | |
volumes: | |
- /etc/localtime:/etc/localtime:ro | |
- /etc/timezone:/etc/tmezone:ro | |
depends_on: | |
- zabbix-server | |
- zabbix_pgsql | |
environment: | |
DB_SERVER_HOST: zabbix_pgsql | |
POSTGRES_DB: zabbix | |
POSTGRES_USER: zabbix | |
POSTGRES_PASSWORD: passwd | |
PHP_TZ: Asia/Tokyo | |
ZBX_SERVER_HOST: zabbix-server | |
# ZBX_SERVER_PORT: 10051 | |
ZBX_SERVER_NAME: zabbix3.example.com | |
VIRTUAL_HOST: zabbix3.example.com | |
VIRTUAL_PORT: 80 | |
links: | |
- zabbix_pgsql:zabbix_pgsql | |
- zabbix-server:zabbix-server | |
networks: | |
default: | |
external: | |
name: common_link |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment