diff --git a/nginx-popular-paths.sh b/nginx-popular-paths.sh new file mode 100644 index 0000000..137e6c0 --- /dev/null +++ b/nginx-popular-paths.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +# Nginx Popular Paths +# Just a simple script to mine Nginx logs to find the most popular paths. +# +# Usage: +# ./nginx-popular-paths.sh [-L|--logfile ] [-D|--days ] [-C|--count ] +# +# Author: Josh Sherman (joshtronic.com) +# Link: https://git.sherver.org/joshtronic/nginx-popular-paths +# License: MIT + +# Argument defaults +LOGFILE='/var/log/nginx/access.log' +DAYS=30 +COUNT=10 + +# Parse any arguments +while [[ "$#" -gt 0 ]]; do + case "$1" in + -C|--count) + COUNT="$2" + shift 2 + ;; + -D|--days) + DAYS="$2" + shift 2 + ;; + -L|--logfile) + LOGFILE="$2" + shift 2 + ;; + -*) + echo "Unknown option: $1" >&2 + exit 1 + ;; + *) + break + ;; + esac +done + +# Stand up and tear down our temp file +TMPFILE=$(mktemp) +trap 'rm -f "$TMPFILE"' EXIT + +# Start with the base logfile +[[ -f "$LOGFILE" ]] && cat "$LOGFILE" >> "$TMPFILE" + +# Look for additional logfiles and archives +for i in $(seq 1 99); do + RAWFILE="$LOGFILE.$i" + GZFILE="$LOGFILE.$i.gz" + + if [[ -f "$RAWFILE" ]]; then + cat "$RAWFILE" >> "$TMPFILE" + elif [[ -f "$GZFILE" ]]; then + zcat "$GZFILE" >> "$TMPFILE" + else + break + fi +done + +# DEBUG: Log the new file +cat $TMPFILE