webinoly/lib/datadog
Cristhian Martínez Ochoa 7fbbdb48a5 fixes
Errors in log and status when mysql is installed.
Error when mysql root password is changed.
Error when datadog is purged.
Now we use systemctl instead of service.
2021-12-21 17:10:10 -07:00

450 lines
14 KiB
Bash

#!/bin/bash
dd_nginx_purge() {
if [[ -f /etc/datadog-agent/conf.d/nginx.d/conf.yaml ]]; then
if [[ ! -f /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml ]]; then
sudo sed -i '/WebinolyLocalhostStart/,/WebinolyLocalhostEnd/{/.*/d}' /etc/nginx/sites-available/$(conf_read tools-port)
fi
sudo rm -rf /etc/datadog-agent/conf.d/nginx.d/conf.yaml
echo "${gre}Datadog Nginx integration has been successfully removed!${end}"
else
echo "${gre}Datadog Nginx integration is not installed, so not removed!${end}"
fi
}
dd_fpm_purge() {
if [[ -f /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml ]]; then
if [[ ! -f /etc/datadog-agent/conf.d/nginx.d/conf.yaml ]]; then
sudo sed -i '/WebinolyLocalhostStart/,/WebinolyLocalhostEnd/{/.*/d}' /etc/nginx/sites-available/$(conf_read tools-port)
fi
sudo rm -rf /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
echo "${gre}Datadog PHP-FPM integration has been successfully removed!${end}"
else
echo "${gre}Datadog PHP-FPM integration is not installed, so not removed!${end}"
fi
}
dd_mysql_purge() {
if [[ -f /etc/datadog-agent/conf.d/mysql.d/conf.yaml ]]; then
sudo rm -rf /etc/datadog-agent/conf.d/mysql.d/conf.yaml
echo "${gre}Datadog MySQL integration has been successfully removed!${end}"
else
echo "${gre}Datadog MySQL integration is not installed, so not removed!${end}"
fi
}
dd_redis_purge() {
if [[ -f /etc/datadog-agent/conf.d/redisdb.d/conf.yaml ]]; then
sudo rm -rf /etc/datadog-agent/conf.d/redisdb.d/conf.yaml
echo "${gre}Datadog Redis integration has been successfully removed!${end}"
else
echo "${gre}Datadog Redis integration is not installed, so not removed!${end}"
fi
}
dd_logs_enable() {
if [[ $(is_dd_log global) != "true" ]]; then
echo "# WebinolyLogsStart
logs_enabled: true
logs_config:
use_http: true
use_compression: true
# WebinolyLogsEnd" >> /etc/datadog-agent/datadog.yaml
fi
}
dd_logs_disable() {
if [[ $(is_dd_log nginx) != "true" && $(is_dd_log fpm) != "true" && $(is_dd_log mysql) != "true" && $(is_dd_log redis) != "true" ]]; then
sudo sed -i '/WebinolyLogsStart/,/WebinolyLogsEnd/{/.*/d}' /etc/datadog-agent/datadog.yaml
fi
}
logrotate_perm() {
if [[ $1 == "nginx" ]]; then
local path="/etc/logrotate.d/nginx"
local owner="www-data adm"
elif [[ $1 == "fpm" ]]; then
local path="/etc/logrotate.d/php$(conf_read php-ver)-fpm"
local owner="root root"
elif [[ $1 == "mysql" ]]; then
local path="/etc/logrotate.d/mysql-server"
local owner="mysql adm"
elif [[ $1 == "redis" ]]; then
local path="/etc/logrotate.d/redis-server"
local owner="redis adm"
else
local path=""
local owner=""
fi
if [[ -n $path && -n $owner ]]; then
sudo sed -i "/create [0-9]/d" $path
sudo sed -i "/missingok/i \ create 0644 $owner" $path
fi
}
dd_nginx_logs_extended() {
for site in "/etc/nginx/sites-available"/*
do
domi=$(echo $site | cut -f 5 -d "/")
if [[ -n $domi && $domi != "default" ]]; then
if [[ -L /etc/nginx/sites-enabled/$domi && -z $( grep -F "access_log off;" /etc/nginx/sites-available/$domi) ]]; then
[[ -f /var/log/nginx/$domi.access.log ]] && sudo chmod 644 /var/log/nginx/$domi.access.log
[[ -f /var/log/nginx/$domi.error.log ]] && sudo chmod 644 /var/log/nginx/$domi.error.log
echo "#WebinolyDatadogLogsStart
- type: file
path: /var/log/nginx/$domi.access.log
service: nginx
source: $domi
- type: file
path: /var/log/nginx/$domi.error.log
service: nginx
source: $domi
#WebinolyDatadogLogsEnd" >> /etc/datadog-agent/conf.d/nginx.d/conf.yaml
echo "${gre}Datadog Nginx Logs for ${blu}${domi}${gre} has been successfully enabled!${end}"
elif [[ -L /etc/nginx/sites-enabled/$domi ]]; then
[[ -f /var/log/nginx/$domi.error.log ]] && sudo chmod 644 /var/log/nginx/$domi.error.log
echo "#WebinolyDatadogLogsStart
- type: file
path: /var/log/nginx/$domi.error.log
service: nginx
source: $domi
#WebinolyDatadogLogsEnd" >> /etc/datadog-agent/conf.d/nginx.d/conf.yaml
echo "${gre}Datadog Nginx (Only-Error) Logs for ${blu}${domi}${gre} has been successfully enabled!${end}"
else
echo "${gre}Datadog Nginx Logs for ${blu}${domi}${gre} can NOT be added because your site is disabled!${end}"
fi
fi
done
}
dd_nginx_logs() {
if [[ $(is_dd_log nginx) == "true" ]]; then
echo "${gre}Datadog Nginx Log is already enabled!${end}"
elif [[ -f /etc/datadog-agent/conf.d/nginx.d/conf.yaml ]]; then
logrotate_perm nginx
[[ -f /var/log/nginx/error.log ]] && sudo chmod 644 /var/log/nginx/error.log
[[ -d /var/log/nginx ]] && sudo chmod 755 /var/log/nginx
if [[ -z $( grep -F "access_log off;" /etc/nginx/nginx.conf ) ]]; then
[[ -f /var/log/nginx/access.log ]] && sudo chmod 644 /var/log/nginx/access.log
echo "#WebinolyDatadogLogsStart
logs:
- type: file
path: /var/log/nginx/access.log
service: nginx
source: nginx
- type: file
path: /var/log/nginx/error.log
service: nginx
source: nginx
#WebinolyDatadogLogsEnd" >> /etc/datadog-agent/conf.d/nginx.d/conf.yaml
else
echo "#WebinolyDatadogLogsStart
logs:
- type: file
path: /var/log/nginx/error.log
service: nginx
source: nginx
#WebinolyDatadogLogsEnd" >> /etc/datadog-agent/conf.d/nginx.d/conf.yaml
fi
dd_nginx_logs_extended
dd_logs_enable
echo "${gre}Datadog Nginx Logs (global) has been successfully enabled!${end}"
else
echo "${red}[ERROR] Datadog Nginx integration is not enabled!${end}"
exit 1
fi
}
dd_fpm_logs() {
if [[ $(is_dd_log fpm) == "true" ]]; then
echo "${gre}Datadog PHP-FPM Log is already enabled!${end}"
elif [[ -f /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml ]]; then
# REMOVE: Check for stacks built before v1.11.0
if [[ -f /var/log/php/$(conf_read php-ver)/fpm.log ]]; then
sudo sed -i "/error_log =/c\error_log = \/var\/log\/php$(conf_read php-ver)-fpm.log" /etc/php/$(conf_read php-ver)/fpm/php-fpm.conf
sudo systemctl restart php$(conf_read php-ver)-fpm
fi
logrotate_perm fpm
[[ -f /var/log/php$(conf_read php-ver)-fpm.log ]] && sudo chmod 644 /var/log/php$(conf_read php-ver)-fpm.log
echo "#WebinolyDatadogLogsStart
logs:
- type: file
path: /var/log/php$(conf_read php-ver)-fpm.log
service: php
source: php
#WebinolyDatadogLogsEnd" >> /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
dd_logs_enable
echo "${gre}Datadog PHP-FPM Logs has been successfully enabled!${end}"
else
echo "${red}[ERROR] Datadog PHP-FPM integration is not enabled!${end}"
exit 1
fi
}
dd_mysql_logs() {
if [[ $(is_dd_log mysql) == "true" ]]; then
echo "${gre}Datadog MySQL Log is already enabled!${end}"
elif [[ -f /etc/datadog-agent/conf.d/mysql.d/conf.yaml ]]; then
mysql_default_cnf # REMOVE: In case the stack was built with an old configuration
logrotate_perm mysql
[[ -f /var/log/mysql/error.log ]] && sudo chmod 644 /var/log/mysql/error.log
[[ -d /var/log/mysql ]] && sudo chmod 755 /var/log/mysql
echo "#WebinolyDatadogLogsStart
logs:
- type: file
path: /var/log/mysql/error.log
source: mysql
service: mysql
#WebinolyDatadogLogsEnd" >> /etc/datadog-agent/conf.d/mysql.d/conf.yaml
dd_logs_enable
echo "${gre}Datadog MySQL Logs has been successfully enabled!${end}"
else
echo "${red}[ERROR] Datadog MySQL integration is not enabled!${end}"
exit 1
fi
}
dd_redis_logs() {
if [[ $(is_dd_log redis) == "true" ]]; then
echo "${gre}Datadog Redis Log is already enabled!${end}"
elif [[ -f /etc/datadog-agent/conf.d/redisdb.d/conf.yaml ]]; then
logrotate_perm redis
[[ -f /var/log/redis/redis-server.log ]] && sudo chmod 644 /var/log/redis/redis-server.log
[[ -d /var/log/redis ]] && sudo chmod 755 /var/log/redis
echo "#WebinolyDatadogLogsStart
logs:
- type: file
path: /var/log/redis/redis-server.log
source: redis
service: redis
#WebinolyDatadogLogsEnd" >> /etc/datadog-agent/conf.d/redisdb.d/conf.yaml
dd_logs_enable
echo "${gre}Datadog Redis Logs has been successfully enabled!${end}"
else
echo "${red}[ERROR] Datadog Redis integration is not enabled!${end}"
exit 1
fi
}
dd_nginx() {
if [[ ! -f /etc/datadog-agent/conf.d/nginx.d/conf.yaml ]]; then
if [[ -z $(grep -F "WebinolyLocalhostStart" /etc/nginx/sites-available/$(conf_read tools-port)) ]]; then
sudo sed -i '/Webinoly Admin-Tools NGINX CONFIGURATION/r /opt/webinoly/templates/general/tools-site-localhost' /etc/nginx/sites-available/$(conf_read tools-port)
fi
sudo touch /etc/datadog-agent/conf.d/nginx.d/conf.yaml
sudo chmod 644 /etc/datadog-agent/conf.d/nginx.d/conf.yaml
sudo chown dd-agent:dd-agent /etc/datadog-agent/conf.d/nginx.d/conf.yaml
echo "init_config:
instances:
- nginx_status_url: http://localhost/nginx_status
" >> /etc/datadog-agent/conf.d/nginx.d/conf.yaml
[[ $logs != "off" ]] && dd_nginx_logs
echo "${gre}Datadog Nginx integration has been successfully configured!${end}"
elif [[ $logs == "on" ]]; then
dd_nginx_logs
elif [[ $logs == "off" ]]; then
if [[ $(is_dd_log nginx) == "true" ]]; then
sudo sed -i '/WebinolyDatadogLogsStart/,/WebinolyDatadogLogsEnd/{/.*/d}' /etc/datadog-agent/conf.d/nginx.d/conf.yaml
dd_logs_disable
echo "${gre}Datadog Nginx Logs has been successfully disabled!${end}"
else
echo "${gre}Datadog Nginx Log is already disabled!${end}"
fi
else
echo "${gre}Datadog Nginx integration is already enabled!${end}"
fi
}
dd_fpm() {
if [[ ! -f /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml ]]; then
if [[ -z $(grep -F "WebinolyLocalhostStart" /etc/nginx/sites-available/$(conf_read tools-port)) ]]; then
sudo sed -i '/Webinoly Admin-Tools NGINX CONFIGURATION/r /opt/webinoly/templates/general/tools-site-localhost' /etc/nginx/sites-available/$(conf_read tools-port)
fi
sudo touch /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
sudo chmod 644 /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
sudo chown dd-agent:dd-agent /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
echo "init_config:
instances:
- status_url: http://localhost/status
ping_url: http://localhost/ping
use_fastcgi: false
ping_reply: pong
" >> /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
[[ $logs != "off" ]] && dd_fpm_logs
echo "${gre}Datadog PHP-FPM integration has been successfully configured!${end}"
elif [[ $logs == "on" ]]; then
dd_fpm_logs
elif [[ $logs == "off" ]]; then
if [[ $(is_dd_log fpm) == "true" ]]; then
sudo sed -i '/WebinolyDatadogLogsStart/,/WebinolyDatadogLogsEnd/{/.*/d}' /etc/datadog-agent/conf.d/php_fpm.d/conf.yaml
dd_logs_disable
echo "${gre}Datadog PHP-FPM Logs has been successfully disabled!${end}"
else
echo "${gre}Datadog PHP-FPM Log is already disabled!${end}"
fi
else
echo "${gre}Datadog PHP-FPM integration is already enabled!${end}"
fi
}
dd_mysql() {
if [[ ! -f /etc/datadog-agent/conf.d/mysql.d/conf.yaml ]]; then
sudo touch /etc/datadog-agent/conf.d/mysql.d/conf.yaml
sudo chmod 644 /etc/datadog-agent/conf.d/mysql.d/conf.yaml
sudo chown dd-agent:dd-agent /etc/datadog-agent/conf.d/mysql.d/conf.yaml
echo "init_config:
instances:
- server: 127.0.0.1
user: admin
pass: '$ADMIN_PASS'
port: \"3306\"
options:
replication: false
galera_cluster: false
extra_status_metrics: true
extra_innodb_metrics: true
extra_performance_metrics: true
schema_size_metrics: false
disable_innodb_metrics: false
" >> /etc/datadog-agent/conf.d/mysql.d/conf.yaml
[[ $logs != "off" ]] && dd_mysql_logs
echo "${gre}Datadog MySQL integration has been successfully configured!${end}"
elif [[ $logs == "on" ]]; then
dd_mysql_logs
elif [[ $logs == "off" ]]; then
if [[ $(is_dd_log mysql) == "true" ]]; then
sudo sed -i '/WebinolyDatadogLogsStart/,/WebinolyDatadogLogsEnd/{/.*/d}' /etc/datadog-agent/conf.d/mysql.d/conf.yaml
dd_logs_disable
echo "${gre}Datadog MySQL Logs has been successfully disabled!${end}"
else
echo "${gre}Datadog MySQL Log is already disabled!${end}"
fi
else
echo "${gre}Datadog MySQL integration is already enabled!${end}"
fi
}
dd_redis() {
if [[ ! -f /etc/datadog-agent/conf.d/redisdb.d/conf.yaml ]]; then
sudo touch /etc/datadog-agent/conf.d/redisdb.d/conf.yaml
sudo chmod 644 /etc/datadog-agent/conf.d/redisdb.d/conf.yaml
sudo chown dd-agent:dd-agent /etc/datadog-agent/conf.d/redisdb.d/conf.yaml
echo "init_config:
instances:
- host: localhost
port: 6379
" >> /etc/datadog-agent/conf.d/redisdb.d/conf.yaml
[[ $logs != "off" ]] && dd_redis_logs
echo "${gre}Datadog Redis integration has been successfully configured!${end}"
elif [[ $logs == "on" ]]; then
dd_redis_logs
elif [[ $logs == "off" ]]; then
if [[ $(is_dd_log redis) == "true" ]]; then
sudo sed -i '/WebinolyDatadogLogsStart/,/WebinolyDatadogLogsEnd/{/.*/d}' /etc/datadog-agent/conf.d/redisdb.d/conf.yaml
dd_logs_disable
echo "${gre}Datadog Redis Logs has been successfully disabled!${end}"
else
echo "${gre}Datadog Redis Log is already disabled!${end}"
fi
else
echo "${gre}Datadog Redis integration is already enabled!${end}"
fi
}
dd_purge() {
if [[ -d /etc/datadog-agent ]]; then
sudo apt-get remove --purge datadog-agent -y
[[ -f /etc/nginx/sites-available/$(conf_read tools-port) ]] && sudo sed -i '/WebinolyLocalhostStart/,/WebinolyLocalhostEnd/{/.*/d}' /etc/nginx/sites-available/$(conf_read tools-port)
echo "${gre}Datadog Agent has been removed successfully from your server!${end}"
else
echo "${red}[ERROR] Datadog Agent is not installed on your server!${end}"
exit 1
fi
}
dd_install() {
if ! [[ $(command -v curl) ]]; then
echo "${red}[ERROR] Curl package is required for Datadog!${end}"
exit 1
elif [[ -d /etc/datadog-agent ]]; then
echo "${gre}Datadog Agent is already installed in your server!${end}"
else
[[ $datadog == true ]] && read -p "${blu}Datatdog API key: ${end}" datadog
if [[ $datadog == true ]]; then
echo "${red}[ERROR] Invalid Datadog API key!${end}"
exit 1
elif ! [[ $datadog =~ ^[0-9a-zA-Z]+$ ]]; then
echo "${red}[ERROR] Invalid Datadog API key!${end}"
exit 1
else
DD_INSTALL_ONLY=true DD_AGENT_MAJOR_VERSION=$datadog_agent_ver DD_API_KEY=$datadog bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)"
if [[ $integrations != "off" ]]; then
[[ $(conf_read nginx) == "true" ]] && dd_nginx
[[ $(conf_read php) == "true" ]] && dd_fpm
[[ $(conf_read mysql) == "true" ]] && dd_mysql
[[ $(conf_read php-tool-redis) == "true" ]] && dd_redis
fi
sudo systemctl start datadog-agent
echo "${gre}Datadog Agent has been successfully installed in your server!${end}"
fi
fi
}