Add support for logrotate and supervisor

Issue #9
This commit is contained in:
Carlos Álvaro
2018-12-19 22:19:57 +01:00
parent 47491ef8d7
commit f0bbbdcb33
10 changed files with 107 additions and 15 deletions

View File

@@ -12,6 +12,8 @@ Please refer to the SaltStack [Release Notes](https://docs.saltstack.com/en/deve
- Expose `/home/salt/data/logs` - Expose `/home/salt/data/logs`
- Run `salt-master` as `salt` user - Run `salt-master` as `salt` user
- Add support for setting timezone - Add support for setting timezone
- Add logrotate support
- Add supervisor support
**2018.3.2** **2018.3.2**

View File

@@ -47,7 +47,8 @@ RUN apt-get update
RUN apt-get install --yes --quiet --no-install-recommends \ RUN apt-get install --yes --quiet --no-install-recommends \
sudo ca-certificates wget locales pkg-config openssh-client \ sudo ca-certificates wget locales pkg-config openssh-client \
python${PYTHON_VERSION} python${PYTHON_VERSION}-dev \ python${PYTHON_VERSION} python${PYTHON_VERSION}-dev \
python3-pip python3-setuptools python3-wheel gettext-base python3-pip python3-setuptools python3-wheel gettext-base \
supervisor logrotate
# Configure locales # Configure locales
RUN update-locale LANG=C.UTF-8 LC_MESSAGES=POSIX \ RUN update-locale LANG=C.UTF-8 LC_MESSAGES=POSIX \

View File

@@ -22,7 +22,8 @@ quickstart:
--publish=4505:4505/tcp --publish=4506:4506/tcp \ --publish=4505:4505/tcp --publish=4506:4506/tcp \
--env "USERMAP_UID=$(shell id -u)" --env "USERMAP_GID=$(shell id -g)" \ --env "USERMAP_UID=$(shell id -u)" --env "USERMAP_GID=$(shell id -g)" \
--env SALT_LOG_LEVEL=info \ --env SALT_LOG_LEVEL=info \
--read-only --volume $(shell pwd)/srv/:/home/salt/data/srv/ \ --volume $(shell pwd)/srv/:/home/salt/data/srv/ \
--volume $(shell pwd)/logs/:/home/salt/data/logs/ \
cdalvaro/saltstack-master:latest cdalvaro/saltstack-master:latest
@echo "Type 'make logs' for the logs" @echo "Type 'make logs' for the logs"

View File

@@ -19,6 +19,7 @@ For other methods to install SaltStack please refer to the [Official SaltStack I
- [Git Fileserver](#git-fileserver) - [Git Fileserver](#git-fileserver)
- [GitPython](#gitpython) - [GitPython](#gitpython)
- [PyGit2](#pygit2) - [PyGit2](#pygit2)
- [Logs](#logs)
- [Available Configuration Parameters](#available-configuration-parameters) - [Available Configuration Parameters](#available-configuration-parameters)
- [Usage](#usage) - [Usage](#usage)
- [Shell Access](#shell-access) - [Shell Access](#shell-access)
@@ -171,6 +172,22 @@ _pygit2.GitError: Failed to authenticate SSH session: Unable to send userauth-pu
look if your private key hash empty lines at the bottom of the file and suppress them for solving the error. look if your private key hash empty lines at the bottom of the file and suppress them for solving the error.
### Logs
Salt logs are accessible by mounting the volume `/home/salt/data/logs/`.
Inside that directory you could find `supervisor/` logs and `salt/` logs:
docker run --name salt_master --detach \
--publish 4505:4505/tcp --publish 4506:4506/tcp \
--env 'SALT_LOG_LEVEL=info' \
--volume $(pwd)/recipes/:/home/salt/data/srv/ \
--volume $(pwd)/keys/:/home/salt/data/keys/ \
--volume $(pwd)/logs/:/home/salt/data/logs/ \
cdalvaro/saltstack-master:2018.3.3
Check [Available Configuration Parameters](#available-configuration-parameters) section for configuring logrotate.
### Available Configuration Parameters ### Available Configuration Parameters
Please refer the docker run command options for the `--env-file` flag where you can specify all required environment variables in a single file. This will save you from writing a potentially long docker run command. Alternatively you can use docker-compose. Please refer the docker run command options for the `--env-file` flag where you can specify all required environment variables in a single file. This will save you from writing a potentially long docker run command. Alternatively you can use docker-compose.
@@ -182,6 +199,8 @@ Below is the list of available options that can be used to customize your SaltSt
| `DEBUG` | Set this to `true` to enable entrypoint debugging. | | `DEBUG` | Set this to `true` to enable entrypoint debugging. |
| `TIMEZONE` | Set the container timezone. Defaults to `UTC`. Values are expected to be in Canonical format. Example: `Europe/Madrid`. See the list of [acceptable values](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). | | `TIMEZONE` | Set the container timezone. Defaults to `UTC`. Values are expected to be in Canonical format. Example: `Europe/Madrid`. See the list of [acceptable values](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). |
| `SALT_LOG_LEVEL` | The level of messages to send to the console. One of 'garbage', 'trace', 'debug', info', 'warning', 'error', 'critical'. Default: `warning` | | `SALT_LOG_LEVEL` | The level of messages to send to the console. One of 'garbage', 'trace', 'debug', info', 'warning', 'error', 'critical'. Default: `warning` |
| `SALT_LOG_ROTATE_FREQUENCY` | Logrotate frequency for salt logs. Available options are 'daily', 'weekly', 'monthly', and 'yearly'. Default: `weekly` |
| `SALT_LOG_ROTATE_RETENTION` | Keep x files before deleting old log files. Defaults: `52` |
| `SALT_LEVEL_LOGFILE` | The level of messages to send to the log file. One of 'garbage', 'trace', 'debug', info', 'warning', 'error', 'critical'. Default: `warning` | | `SALT_LEVEL_LOGFILE` | The level of messages to send to the log file. One of 'garbage', 'trace', 'debug', info', 'warning', 'error', 'critical'. Default: `warning` |
| `SALT_MASTER_SIGN_PUBKEY` | Sign the master auth-replies with a cryptographic signature of the master's public key. Possible values: 'True' or 'False'. Default: `False` | | `SALT_MASTER_SIGN_PUBKEY` | Sign the master auth-replies with a cryptographic signature of the master's public key. Possible values: 'True' or 'False'. Default: `False` |
| `SALT_MASTER_USE_PUBKEY_SIGNATURE` | Instead of computing the signature for each auth-reply, use a pre-calculated signature. This option requires `SALT_MASTER_SIGN_PUBKEY` set to 'True'. Possible values: 'True' or 'False'. Default: `True` | | `SALT_MASTER_USE_PUBKEY_SIGNATURE` | Instead of computing the signature for each auth-reply, use a pre-calculated signature. This option requires `SALT_MASTER_SIGN_PUBKEY` set to 'True'. Possible values: 'True' or 'False'. Default: `True` |

View File

@@ -71,3 +71,30 @@ sed -i -e "s|^[# ]*StrictHostKeyChecking.*$| StrictHostKeyChecking no|" /etc/
echo " UserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config echo " UserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config
echo " LogLevel ERROR" >> /etc/ssh/ssh_config echo " LogLevel ERROR" >> /etc/ssh/ssh_config
echo "# IdentityFile salt_ssh_key" >> /etc/ssh/ssh_config echo "# IdentityFile salt_ssh_key" >> /etc/ssh/ssh_config
# Configure logrotate
echo "Configuring logrotate ..."
# move supervisord.log file to ${SALT_LOGS_DIR}/supervisor/
sed -i "s|^[#]*logfile=.*|logfile=${SALT_LOGS_DIR}/supervisor/supervisord.log ;|" /etc/supervisor/supervisord.conf
# fix "unknown group 'syslog'" error preventing logrotate from functioning
sed -i "s|^su root syslog$|su root root|" /etc/logrotate.conf
# Configure supervisor
echo "Configuring supervisor ..."
# configure supervisord to start unicorn
cat > /etc/supervisor/conf.d/salt-master.conf <<EOF
[program:salt-master]
priority=5
directory=${SALT_HOME}
environment=HOME=${SALT_HOME}
command=salt-master
user=${SALT_USER}
autostart=true
autorestart=true
stopsignal=QUIT
stdout_logfile=${SALT_LOGS_DIR}/supervisor/%(program_name)s.log
stderr_logfile=${SALT_LOGS_DIR}/supervisor/%(program_name)s.log
EOF

View File

@@ -47,7 +47,7 @@ master_use_pubkey_signature: {{SALT_MASTER_USE_PUBKEY_SIGNATURE}}
##### Salt-SSH Configuration ##### ##### Salt-SSH Configuration #####
########################################## ##########################################
# The log file of the salt-ssh command: # The log file of the salt-ssh command:
ssh_log_file: {{SALT_LOGS_DIR}}/ssh ssh_log_file: {{SALT_LOGS_DIR}}/salt/ssh
##### File Server settings ##### ##### File Server settings #####
@@ -94,14 +94,14 @@ pillar_roots:
# to receive commands from. # to receive commands from.
# The log file of the salt-syndic daemon: # The log file of the salt-syndic daemon:
syndic_log_file: {{SALT_LOGS_DIR}}/syndic syndic_log_file: {{SALT_LOGS_DIR}}/salt/syndic
##### Logging settings ##### ##### Logging settings #####
########################################## ##########################################
# The location of the master log file # The location of the master log file
log_file: {{SALT_LOGS_DIR}}/master log_file: {{SALT_LOGS_DIR}}/salt/master
key_logfile: {{SALT_LOGS_DIR}}/key key_logfile: {{SALT_LOGS_DIR}}/salt/key
# The level of messages to send to the console. # The level of messages to send to the console.
# One of 'garbage', 'trace', 'debug', info', 'warning', 'error', 'critical'. # One of 'garbage', 'trace', 'debug', info', 'warning', 'error', 'critical'.

View File

@@ -3,6 +3,9 @@
DEBUG=${DEBUG:-false} DEBUG=${DEBUG:-false}
TIMEZONE=${TIMEZONE:-UTC} TIMEZONE=${TIMEZONE:-UTC}
SALT_LOG_ROTATE_FREQUENCY=${SALT_LOG_ROTATE_FREQUENCY:-weekly}
SALT_LOG_ROTATE_RETENTION=${SALT_LOG_ROTATE_RETENTION:-52}
# https://docs.saltstack.com/en/latest/ref/configuration/master.html # https://docs.saltstack.com/en/latest/ref/configuration/master.html
##### Logging settings ##### ##### Logging settings #####

View File

@@ -171,22 +171,58 @@ function initialize_datadir()
[[ -d /srv ]] && [[ ! -L /srv ]] && rm -rf /srv [[ -d /srv ]] && [[ ! -L /srv ]] && rm -rf /srv
ln -sfnv ${SALT_BASE_DIR} /srv ln -sfnv ${SALT_BASE_DIR} /srv
# Set Slat root permissions # Set Salt root permissions
chown -R ${SALT_USER} ${SALT_ROOT_DIR} chown -R ${SALT_USER}: ${SALT_ROOT_DIR}
# Set Salt run permissions # Set Salt run permissions
mkdir -p /var/run/salt mkdir -p /var/run/salt
chown -R ${SALT_USER} /var/run/salt chown -R ${SALT_USER}: /var/run/salt
# Set cache permissions # Set cache permissions
mkdir -p /var/cache/salt/master mkdir -p /var/cache/salt/master
chown -R salt /var/cache/salt chown -R ${SALT_USER}: /var/cache/salt
# Logs directory # Logs directory
mkdir -p ${SALT_LOGS_DIR}/salt ${SALT_LOGS_DIR}/supervisor
chmod -R 0755 ${SALT_LOGS_DIR}/supervisor
chown -R root: ${SALT_LOGS_DIR}/supervisor
[[ -d /var/log/salt ]] && [[ ! -L /var/log/salt ]] && rm -rf /var/log/salt [[ -d /var/log/salt ]] && [[ ! -L /var/log/salt ]] && rm -rf /var/log/salt
mkdir -p /var/log mkdir -p ${SALT_LOGS_DIR}/salt /var/log
ln -sfnv ${SALT_LOGS_DIR} /var/log/salt ln -sfnv ${SALT_LOGS_DIR}/salt /var/log/salt
chown -R ${SALT_USER} ${SALT_LOGS_DIR} chown -R ${SALT_USER}: ${SALT_LOGS_DIR}/salt
}
# Configures logrotate
function configure_logrotate()
{
echo "Configuring logrotate ..."
# configure supervisord log rotation
cat > /etc/logrotate.d/supervisord <<EOF
${SALT_LOGS_DIR}/supervisor/*.log {
${SALT_LOG_ROTATE_FREQUENCY}
missingok
rotate ${SALT_LOG_ROTATE_RETENTION}
compress
delaycompress
notifempty
copytruncate
}
EOF
# configure salt-master log rotation
cat > /etc/logrotate.d/salt <<EOF
${SALT_LOGS_DIR}/salt/* {
${SALT_LOG_ROTATE_FREQUENCY}
missingok
rotate ${SALT_LOG_ROTATE_RETENTION}
compress
delaycompress
notifempty
copytruncate
}
EOF
} }
# Initializes the system # Initializes the system
@@ -194,8 +230,10 @@ function initialize_system()
{ {
map_uidgid map_uidgid
initialize_datadir initialize_datadir
configure_logrotate
configure_timezone configure_timezone
configure_salt_master configure_salt_master
setup_salt_keys setup_salt_keys
setup_ssh_keys setup_ssh_keys
rm -rf /var/run/supervisor.sock
} }

View File

@@ -6,7 +6,8 @@ services:
image: cdalvaro/saltstack-master:2018.3.3 image: cdalvaro/saltstack-master:2018.3.3
restart: always restart: always
volumes: volumes:
- "./srv/:/home/salt/data/srv" - "srv/:/home/salt/data/srv"
- "logs/:/home/salt/data/logs"
ports: ports:
- "4505:4505/tcp" - "4505:4505/tcp"
- "4506:4506/tcp" - "4506:4506/tcp"

View File

@@ -13,7 +13,7 @@ case ${1} in
case ${1} in case ${1} in
app:start) app:start)
echo "Starting salt-master..." echo "Starting salt-master..."
exec sudo -HEu ${SALT_USER} salt-master exec /usr/bin/supervisord -nc /etc/supervisor/supervisord.conf
;; ;;
app:gen-signed-keys) app:gen-signed-keys)
shift 1 shift 1