monitor_logs.sh•3.24 kB
#!/usr/bin/env bash
################################################################################
#
# Script Name: monitor_logs.sh
# ----------------
# Fetches and filters logs from various cloud logging services.
#
# @author Nicholas Wilde, 0xb299a622
# @date 03 Sep 2025
# @version 0.1.0
#
################################################################################
set -o errexit
set -o nounset
set -o pipefail
# --- Global Variables ---
CLOUD_PROVIDER=""
APP_NAME=""
LOG_GROUP=""
START_TIME=""
END_TIME=""
FILTER_PATTERN=""
# --- Functions ---
# Function to display script usage
usage() {
echo "Usage: $0 --cloud-provider <provider> --app-name <name> [--log-group <group>] [--start-time <time>] [--end-time <time>] [--filter <pattern>]"
echo " --cloud-provider Cloud provider (e.g., aws, azure, gcp)."
echo " --app-name Name of the application or service to monitor logs for."
echo " --log-group (Optional) Specific log group or stream to query."
echo " --start-time (Optional) Start time for log retrieval (e.g., '2025-09-01T00:00:00Z')."
echo " --end-time (Optional) End time for log retrieval."
echo " --filter (Optional) Filter pattern for log messages."
exit 1
}
# Function to parse command-line arguments
parse_args() {
while [[ "$#" -gt 0 ]]; do
case "$1" in
--cloud-provider) CLOUD_PROVIDER="$2"; shift ;;
--app-name) APP_NAME="$2"; shift ;;
--log-group) LOG_GROUP="$2"; shift ;;
--start-time) START_TIME="$2"; shift ;;
--end-time) END_TIME="$2"; shift ;;
--filter) FILTER_PATTERN="$2"; shift ;;
-h|--help) usage ;;
*) echo "Unknown parameter passed: $1"; usage ;;
esac
shift
done
# Validate required arguments
if [[ -z "$CLOUD_PROVIDER" || -z "$APP_NAME" ]]; then
echo "Error: Missing required arguments."
usage
fi
}
# Function to monitor AWS logs
monitor_aws_logs() {
echo "Monitoring AWS logs for application: $APP_NAME (Log Group: ${LOG_GROUP:-default})..."
# Example: aws logs filter-log-events --log-group-name "$LOG_GROUP" --start-time "$START_TIME" --end-time "$END_TIME" --filter-pattern "$FILTER_PATTERN"
echo "AWS log monitoring complete."
}
# Function to monitor Azure logs
monitor_azure_logs() {
echo "Monitoring Azure logs for application: $APP_NAME (Log Group: ${LOG_GROUP:-default})..."
# Example: az monitor log-analytics query --workspace <workspace-id> --analytics-query "..."
echo "Azure log monitoring complete."
}
# Function to monitor GCP logs
monitor_gcp_logs() {
echo "Monitoring GCP logs for application: $APP_NAME (Log Group: ${LOG_GROUP:-default})..."
# Example: gcloud logging read "resource.type=k8s_container AND resource.labels.container_name=$APP_NAME" --format=json
echo "GCP log monitoring complete."
}
# --- Main Logic ---
main() {
parse_args "$@"
echo "Starting log monitoring for $APP_NAME on $CLOUD_PROVIDER."
case "$CLOUD_PROVIDER" in
aws)
monitor_aws_logs
;;
azure)
monitor_azure_logs
;;
gcp)
monitor_gcp_logs
;;
*)
echo "Error: Unsupported cloud provider: $CLOUD_PROVIDER"
usage
;;
esac
echo "Log monitoring script finished."
}
main "$@"