webinoly/lib/datadog
Cristhian Martínez Ochoa f5dc8020ea loops
Double check for loops.
Datadog fixed.
2023-11-27 20:52:03 -07:00

453 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/$ADMIN_TOOLS_SITE
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/$ADMIN_TOOLS_SITE
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 (MariaDB) integration has been successfully removed!${end}"
else
echo "${gre}Datadog MySQL (MariaDB) 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
[[ -f /etc/logrotate.d/mariadb ]] && local path="/etc/logrotate.d/mariadb" || 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 && -f $path ]]; 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 (MariaDB) 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 (MariaDB) Logs has been successfully enabled!${end}"
else
echo "${red}[ERROR] Datadog MySQL (MariaDB) 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/$ADMIN_TOOLS_SITE) ]]; then
sudo sed -i '/Webinoly Admin-Tools NGINX CONFIGURATION/r /opt/webinoly/templates/general/tools-site-localhost' /etc/nginx/sites-available/$ADMIN_TOOLS_SITE
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/$ADMIN_TOOLS_SITE) ]]; then
sudo sed -i '/Webinoly Admin-Tools NGINX CONFIGURATION/r /opt/webinoly/templates/general/tools-site-localhost' /etc/nginx/sites-available/$ADMIN_TOOLS_SITE
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: '$( echo $(conf_read mysql-admin) | openssl enc -d -a -salt )'
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 (MariaDB) 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 (MariaDB) Logs has been successfully disabled!${end}"
else
echo "${gre}Datadog MySQL (MariaDB) Log is already disabled!${end}"
fi
else
echo "${gre}Datadog MySQL (MariaDB) 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
sudo rm -rf /usr/share/keyrings/datadog-archive-keyring.gpg*
sudo rm -rf /etc/apt/sources.list.d/datadog.list
[[ -f /etc/nginx/sites-available/$ADMIN_TOOLS_SITE ]] && sudo sed -i '/WebinolyLocalhostStart/,/WebinolyLocalhostEnd/{/.*/d}' /etc/nginx/sites-available/$ADMIN_TOOLS_SITE
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://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.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
}