Last active
December 4, 2024 22:32
-
-
Save afilina/249051bf9e265316e7ee8632c4c45eac to your computer and use it in GitHub Desktop.
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 | |
# Prometheus Exporters install script for RHEL/CentOS based environment | |
# Always the latest exporter versions will be installed! | |
DEFAULT_APACHE_PORT=9117 | |
DEFAULT_NGINX_PORT=9113 | |
DEFAULT_PHPFPM_PORT=9001 | |
DEFAULT_SYSTEM_PORT=9100 | |
check_selinux() { | |
if sestatus | grep -q "enabled"; then | |
echo "SELinux is enabled, adjusting contexts..." | |
SELINUX_ENABLED=true | |
else | |
SELINUX_ENABLED=false | |
fi | |
} | |
adjust_selinux_context() { | |
local binary_path=$1 | |
sudo semanage fcontext -a -t bin_t $binary_path | |
sudo restorecon -v $binary_path | |
} | |
install_apache_exporter() { | |
local port=${1:-$DEFAULT_APACHE_PORT} | |
if ! command -v wget &> /dev/null; then | |
echo "wget is required but not installed. Please install wget." | |
exit 1 | |
fi | |
latest_version=$(curl -s https://api.github.com/repos/Lusitaniae/apache_exporter/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")') | |
download_url=$(curl -s https://api.github.com/repos/Lusitaniae/apache_exporter/releases/latest | grep browser_download_url | grep linux-amd64.tar.gz | cut -d '"' -f 4) | |
wget "$download_url" -O /tmp/apache_exporter.tar.gz | |
tar xvf /tmp/apache_exporter.tar.gz -C /tmp/ | |
extracted_dir=$(tar -tf /tmp/apache_exporter.tar.gz | head -n 1 | cut -d "/" -f 1) | |
sudo mv "/tmp/$extracted_dir/apache_exporter" /usr/local/bin/ | |
rm -rf /tmp/apache_exporter.tar.gz "/tmp/$extracted_dir" | |
sudo chmod 755 /usr/local/bin/apache_exporter | |
sudo chown apache:apache /usr/local/bin/apache_exporter | |
if [ "$SELINUX_ENABLED" = true ]; then | |
adjust_selinux_context /usr/local/bin/apache_exporter | |
fi | |
cat <<EOF | sudo tee /etc/systemd/system/apache_exporter.service >/dev/null | |
[Unit] | |
Description=Apache Exporter | |
Wants=network-online.target | |
After=network-online.target | |
[Service] | |
User=apache | |
Group=apache | |
Type=simple | |
ExecStart=/usr/local/bin/apache_exporter --insecure --scrape_uri=http://localhost/server-status/?auto --telemetry.endpoint=/metrics --web.listen-address=:${port} | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
sudo systemctl daemon-reload | |
sudo systemctl enable apache_exporter | |
sudo systemctl start apache_exporter | |
echo "Apache exporter has been installed and configured to run as a service on port $port." | |
} | |
install_nginx_exporter() { | |
local port=${1:-$DEFAULT_NGINX_PORT} | |
sudo yum install -y epel-release | |
sudo yum install -y snapd | |
sudo ln -s /var/lib/snapd/snap /snap | |
sudo snap install nginx-prometheus-exporter | |
if [ "$SELINUX_ENABLED" = true ]; then | |
adjust_selinux_context /snap/bin/nginx-prometheus-exporter | |
fi | |
cat <<EOF | sudo tee /etc/systemd/system/nginx_exporter.service >/dev/null | |
[Unit] | |
Description=Nginx Exporter | |
Wants=network-online.target | |
After=network-online.target | |
[Service] | |
Type=simple | |
ExecStart=/snap/bin/nginx-prometheus-exporter --nginx.scrape-uri=http://127.0.0.1:8080/stub_status --web.listen-address=:$port | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
sudo systemctl daemon-reload | |
sudo systemctl enable nginx_exporter | |
sudo systemctl start nginx_exporter | |
echo "Nginx exporter has been installed and configured to run as a service on port $port." | |
} | |
install_phpfpm_exporter() { | |
local port=${1:-$DEFAULT_PHPFPM_PORT} | |
latest_version=$(curl -sI https://github.com/hipages/php-fpm_exporter/releases/latest | grep -i location | awk -F'/' '{print $NF}' | tr -d '\r\n[:space:]') | |
version_without_v=${latest_version#?} | |
download_url="https://github.com/hipages/php-fpm_exporter/releases/download/$latest_version/php-fpm_exporter_${version_without_v}_linux_amd64.tar.gz" | |
temp_dir=$(mktemp -d) | |
wget "$download_url" -O "$temp_dir/php-fpm_exporter.tar.gz" | |
tar -xzvf "$temp_dir/php-fpm_exporter.tar.gz" -C "$temp_dir" | |
sudo mv "$temp_dir/php-fpm_exporter" /usr/local/bin/ | |
chmod a+x /usr/local/bin/php-fpm_exporter | |
rm -rf "$temp_dir" | |
if [ "$SELINUX_ENABLED" = true ]; then | |
adjust_selinux_context /usr/local/bin/php-fpm_exporter | |
fi | |
cat <<EOF | sudo tee /etc/systemd/system/php-fpm_exporter.service >/dev/null | |
[Unit] | |
Description=PHP-FPM Exporter | |
Wants=network-online.target | |
After=network-online.target | |
[Service] | |
Type=simple | |
ExecStart=/usr/local/bin/php-fpm_exporter server --phpfpm.scrape-uri unix:///var/opt/zend/php80zend/run/php-fpm/www.sock;/status --web.listen-address=":$port" | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
sudo systemctl daemon-reload | |
sudo systemctl enable php-fpm_exporter | |
sudo systemctl start php-fpm_exporter | |
echo "PHP-FPM exporter has been installed and configured to run as a service on port $port." | |
} | |
install_system_exporter() { | |
local port=${1:-$DEFAULT_SYSTEM_PORT} | |
echo "Downloading Node Exporter..." | |
NODE_EXPORTER_VERSION=$(curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")') | |
DOWNLOAD_VERSION="${NODE_EXPORTER_VERSION#v}" | |
DOWNLOAD_URL="https://github.com/prometheus/node_exporter/releases/download/$NODE_EXPORTER_VERSION/node_exporter-$DOWNLOAD_VERSION.linux-amd64.tar.gz" | |
wget "$DOWNLOAD_URL" -O /tmp/node_exporter.tar.gz | |
if [ $? -ne 0 ]; then | |
echo "Failed to download Node Exporter." | |
exit 1 | |
fi | |
tar -xzf /tmp/node_exporter.tar.gz -C /tmp/ | |
if [ $? -ne 0 ]; then | |
echo "Failed to extract Node Exporter archive." | |
exit 1 | |
fi | |
sudo mv "/tmp/node_exporter-$DOWNLOAD_VERSION.linux-amd64/node_exporter" /usr/local/bin/ | |
if [ $? -ne 0 ]; then | |
echo "Failed to move Node Exporter binary to /usr/local/bin/." | |
exit 1 | |
fi | |
rm -f /tmp/node_exporter.tar.gz | |
rm -rf "/tmp/node_exporter-$DOWNLOAD_VERSION.linux-amd64" | |
if ! id -u node_exporter &>/dev/null; then | |
sudo useradd -rs /bin/false node_exporter | |
fi | |
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter | |
sudo chmod 755 /usr/local/bin/node_exporter | |
if [ "$SELINUX_ENABLED" = true ]; then | |
adjust_selinux_context /usr/local/bin/node_exporter | |
fi | |
cat <<EOF | sudo tee /etc/systemd/system/node_exporter.service >/dev/null | |
[Unit] | |
Description=Node Exporter | |
Wants=network-online.target | |
After=network-online.target | |
[Service] | |
User=node_exporter | |
Group=node_exporter | |
Type=simple | |
ExecStart=/usr/local/bin/node_exporter --web.listen-address=:$port | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
sudo systemctl daemon-reload | |
sudo systemctl enable node_exporter | |
sudo systemctl start node_exporter | |
echo "System Exporter installed and started successfully on port $port." | |
} | |
remove_apache_exporter() { | |
sudo systemctl stop apache_exporter | |
sudo systemctl disable apache_exporter | |
sudo rm /etc/systemd/system/apache_exporter.service | |
sudo rm /usr/local/bin/apache_exporter | |
} | |
remove_nginx_exporter() { | |
sudo systemctl stop nginx_exporter | |
sudo systemctl disable nginx_exporter | |
sudo rm /etc/systemd/system/nginx_exporter.service | |
sudo snap remove nginx-prometheus-exporter | |
} | |
remove_phpfpm_exporter() { | |
sudo systemctl stop php-fpm_exporter | |
sudo systemctl disable php-fpm_exporter | |
sudo rm /etc/systemd/system/php-fpm_exporter.service | |
sudo rm /usr/local/bin/php-fpm_exporter | |
} | |
remove_system_exporter() { | |
sudo systemctl stop node_exporter | |
sudo systemctl disable node_exporter | |
sudo rm /etc/systemd/system/node_exporter.service | |
sudo rm /usr/local/bin/node_exporter | |
} | |
show_usage() { | |
echo "" | |
echo "Script for installing Prometheus exporters automatically" | |
echo "Usage: $0 [--remove] [exporter1] [--port port1] [exporter2] [--port port2] ..." | |
echo "Available exporters: apache nginx phpfpm system" | |
echo "If no --port with port number defined, defaults will be used" | |
echo "Example exporters install: $0 apache --port 1234 nginx --port 2345 phpfpm system" | |
echo "Example exporters removal: $0 --remove apache phpfpm system" | |
echo "" | |
} | |
main() { | |
check_selinux | |
if [ "$#" -eq 0 ]; then | |
show_usage | |
exit 1 | |
fi | |
if [ "$1" == "--remove" ]; then | |
shift | |
while [ $# -gt 0 ]; do | |
case $1 in | |
apache) | |
remove_apache_exporter | |
;; | |
nginx) | |
remove_nginx_exporter | |
;; | |
phpfpm) | |
remove_phpfpm_exporter | |
;; | |
system) | |
remove_system_exporter | |
;; | |
*) | |
echo "Unknown exporter: $1" | |
show_usage | |
;; | |
esac | |
shift | |
done | |
else | |
while [ $# -gt 0 ]; do | |
case $1 in | |
apache) | |
if [[ "$2" == "--port" ]]; then | |
install_apache_exporter "$3" | |
shift 3 | |
else | |
install_apache_exporter | |
shift | |
fi | |
;; | |
nginx) | |
if [[ "$2" == "--port" ]]; then | |
install_nginx_exporter "$3" | |
shift 3 | |
else | |
install_nginx_exporter | |
shift | |
fi | |
;; | |
phpfpm) | |
if [[ "$2" == "--port" ]]; then | |
install_phpfpm_exporter "$3" | |
shift 3 | |
else | |
install_phpfpm_exporter | |
shift | |
fi | |
;; | |
system) | |
if [[ "$2" == "--port" ]]; then | |
install_system_exporter "$3" | |
shift 3 | |
else | |
install_system_exporter | |
shift | |
fi | |
;; | |
--remove) | |
shift | |
;; | |
*) | |
echo "Unknown parameter or exporter: $1" | |
show_usage | |
exit 1 | |
;; | |
esac | |
done | |
fi | |
} | |
main "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment