#!/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 }