最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux?Shell實現(xiàn)日志監(jiān)控與報警系統(tǒng)

 更新時間:2024年12月30日 08:55:58   作者:戴國進  
這篇文章主要為大家詳細介紹了?如何通過Linux?Shell腳本實現(xiàn)日志監(jiān)控與報警系統(tǒng)功能,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考一下

1.日志監(jiān)控基礎

監(jiān)控文件變化:

  • tail -f:實時查看文件末尾的變化。
  • tail -n:指定查看最近的 N 行。

結(jié)合管道過濾關鍵內(nèi)容:

配合grep 提取特定關鍵字。

例子:

tail -f /var/log/syslog | grep "error"

2.日志文件滾動

了解日志文件的滾動機制(如日志按大小或時間切割)。

使用logrotate 進行日志管理。

3.實時報警機制

結(jié)合awk 提取特定模式并觸發(fā)報警。

郵件報警:

使用mail 或sendmail 命令發(fā)送郵件。

終端提示:

使用echo 和notify-send。

例子:

tail -f application.log | awk '/ERROR/ {print "Error detected: "$0}'

4.復雜監(jiān)控場景

多關鍵字匹配與分級報警。

監(jiān)控多文件并聚合結(jié)果。

5.實驗例子

實驗 1: 簡單日志監(jiān)控

目標:實時監(jiān)控一個日志文件并提取含有 "ERROR" 的行。

實驗代碼:

#!/bin/bash
 
logfile="application.log"
 
if [[ ! -f $logfile ]]; then
  echo "Log file not found: $logfile"
  exit 1
fi
 
echo "Monitoring $logfile for 'ERROR'..."
tail -f $logfile | grep "ERROR"

實驗 2: 動態(tài)監(jiān)控日志并發(fā)送報警

目標:檢測日志文件中的錯誤信息,并在終端顯示報警。

實驗代碼:

#!/bin/bash
 
logfile="application.log"
 
if [[ ! -f $logfile ]]; then
  echo "Log file not found: $logfile"
  exit 1
fi
 
monitor_log() {
  tail -f $logfile | while read line; do
    if echo "$line" | grep -q "ERROR"; then
      echo "[ALERT] $(date): $line"
    fi
  done
}
 
monitor_log

實驗 3: 日志關鍵字分級報警

目標:根據(jù)日志內(nèi)容分類報警,如 "ERROR" 觸發(fā)高優(yōu)先級報警,"WARNING" 觸發(fā)普通報警。

實驗代碼:

#!/bin/bash
 
logfile="application.log"
 
if [[ ! -f $logfile ]]; then
  echo "Log file not found: $logfile"
  exit 1
fi
 
tail -f $logfile | while read line; do
  if echo "$line" | grep -q "ERROR"; then
    echo "[HIGH PRIORITY ALERT] $(date): $line"
  elif echo "$line" | grep -q "WARNING"; then
    echo "[Warning] $(date): $line"
  fi
done

實驗 4: 監(jiān)控多日志文件

目標:同時監(jiān)控多個日志文件,并合并結(jié)果。

實驗代碼:

#!/bin/bash
 
logfiles=("/var/log/syslog" "/var/log/auth.log")
 
for logfile in "${logfiles[@]}"; do
  if [[ -f $logfile ]]; then
    tail -f $logfile | awk -v log=$logfile '{print "["log"] "$0}' &
  else
    echo "File not found: $logfile"
  fi
done
 
wait

實驗 5: 定制報警系統(tǒng)

目標:基于日志信息發(fā)送郵件通知。

實驗代碼:

#!/bin/bash
 
logfile="application.log"
email="admin@example.com"
 
if [[ ! -f $logfile ]]; then
  echo "Log file not found: $logfile"
  exit 1
fi
 
tail -f $logfile | while read line; do
  if echo "$line" | grep -q "CRITICAL"; then
    echo "Critical alert detected: $line" | mail -s "Critical Alert" $email
    echo "Email sent for alert: $line"
  fi
done

6.實操

編寫腳本監(jiān)控/var/log/syslog,提取含有 "Failed" 的行并統(tǒng)計次數(shù)。

#!/bin/bash
 
logfile="/var/log/syslog"
count=0
 
if [[ ! -f $logfile ]]; then
  echo "Log file not found: $logfile"
  exit 1
fi
 
echo "Monitoring $logfile for 'Failed'..."
 
tail -f $logfile | while read line; do
  if echo "$line" | grep -q "Failed"; then
    count=$((count + 1))
    echo "$line"
    echo "Total 'Failed' entries: $count"
  fi
done

實現(xiàn)一個腳本監(jiān)控指定文件夾的文件增長情況。

#!/bin/bash
 
monitor_dir="/path/to/your/directory"
 
if [[ ! -d $monitor_dir ]]; then
  echo "Directory not found: $monitor_dir"
  exit 1
fi
 
echo "Monitoring file changes in $monitor_dir..."
prev_count=$(ls "$monitor_dir" | wc -l)
 
while true; do
  current_count=$(ls "$monitor_dir" | wc -l)
  if [[ $current_count -ne $prev_count ]]; then
    echo "$(date): File count changed from $prev_count to $current_count"
    prev_count=$current_count
  fi
  sleep 2
done

將實驗 3 的代碼改進,支持通過配置文件指定關鍵字和報警級別。

#!/bin/bash
 
logfile="application.log"
config_file="keywords.conf"
 
if [[ ! -f $logfile ]]; then
  echo "Log file not found: $logfile"
  exit 1
fi
 
if [[ ! -f $config_file ]]; then
  echo "Config file not found: $config_file"
  exit 1
fi
 
declare -A keywords
 
while IFS=: read -r keyword level; do
  keywords["$keyword"]=$level
done < "$config_file"
 
tail -f $logfile | while read line; do
  for keyword in "${!keywords[@]}"; do
    if echo "$line" | grep -q "$keyword"; then
      echo "[${keywords[$keyword]} PRIORITY] $(date): $line"
    fi
  done
done

使用tail -f 和awk 實現(xiàn)實時日志監(jiān)控,統(tǒng)計日志中每分鐘的訪問次數(shù)。

#!/bin/bash
 
logfile="access.log"
if [[ ! -f $logfile ]]; then
  echo "Log file not found: $logfile"
  exit 1
fi
 
echo "Monitoring $logfile for access counts per minute..."
 
tail -f $logfile | awk '
{
  timestamp = substr($4, 2, 17)  # 提取時間戳,格式化為 "dd/MMM/yyyy:HH:mm"
  split(timestamp, time_parts, ":")
  minute = time_parts[1] ":" time_parts[2]  # 僅保留到分鐘
  access_counts[minute]++
  print "Access count for " minute ": " access_counts[minute]
}'

編寫腳本實現(xiàn)對超過指定大小的日志文件進行自動歸檔和壓縮。

#!/bin/bash
 
logfile="application.log"
max_size=1048576  # 1 MB in bytes
archive_dir="archives"
 
mkdir -p "$archive_dir"
 
while true; do
  if [[ -f $logfile ]]; then
    log_size=$(stat -c%s "$logfile")
    if (( log_size > max_size )); then
      timestamp=$(date +'%Y%m%d_%H%M%S')
      mv "$logfile" "$archive_dir/application_$timestamp.log"
      gzip "$archive_dir/application_$timestamp.log"
      echo "Archived and compressed $logfile at $timestamp"
      > "$logfile"  # 清空原日志文件
    fi
  fi
  sleep 10
done

到此這篇關于 Linux Shell實現(xiàn)日志監(jiān)控與報警系統(tǒng)的文章就介紹到這了,更多相關Shell日志監(jiān)控與報警內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • linux定時任務基礎命令介紹(14)

    linux定時任務基礎命令介紹(14)

    這篇文章主要為大家詳細介紹了linux定時任務基礎命令,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • linux下怎么解壓.tar.gz .tar.bz2命令

    linux下怎么解壓.tar.gz .tar.bz2命令

    這篇文章主要介紹了linux下解壓.tar.gz .tar.bz2命令的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • Shell函數(shù)的7種用法介紹

    Shell函數(shù)的7種用法介紹

    這篇文章主要介紹了Shell函數(shù)的7種用法介紹,本文講解了在shell文件內(nèi)部定義函數(shù)并引用、返回值、函數(shù)輸出、向函數(shù)傳遞參數(shù)、全局變量與局部變量等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • shell耗時計算的實現(xiàn)

    shell耗時計算的實現(xiàn)

    本文主要介紹了shell耗時計算的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Shell函數(shù)和參數(shù)傳遞基本概念和用法

    Shell函數(shù)和參數(shù)傳遞基本概念和用法

    這篇文章主要介紹了Shell函數(shù)和參數(shù)傳遞基本概念和用法,今天我們將學習如何在Shell編程中定義和使用函數(shù),以及如何傳遞參數(shù)給函數(shù),需要的朋友可以參考下
    2023-07-07
  • Shell時間運算及時間差計算方法

    Shell時間運算及時間差計算方法

    這篇文章主要介紹了Shell時間運算及時間差計算方法,本文講解了時間時間加減運算以及時間差計算方法,需要的朋友可以參考下
    2015-07-07
  • Shell腳本去重的幾種方法實例

    Shell腳本去重的幾種方法實例

    這篇文章主要介紹了Shell腳本去重的幾種方法實例,本文直接給出代碼實例,需要的朋友可以參考下
    2015-07-07
  • Shell腳本判斷進程是否存在的實現(xiàn)示例

    Shell腳本判斷進程是否存在的實現(xiàn)示例

    本文主要介紹了Shell腳本判斷進程是否存在的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 實現(xiàn)釋放CentOS系統(tǒng)內(nèi)存的Shell腳本分享

    實現(xiàn)釋放CentOS系統(tǒng)內(nèi)存的Shell腳本分享

    這篇文章主要介紹了實現(xiàn)釋放CentOS系統(tǒng)內(nèi)存的Shell腳本分享,本文對一些小內(nèi)存的VPS特別有用,需要的朋友可以參考下
    2014-12-12
  • Linux下.tar.xz文件的解壓教程詳解

    Linux下.tar.xz文件的解壓教程詳解

    xz這個壓縮可能很多都很陌生,不過您可知道xz是絕大數(shù)linux默認就帶的一個壓縮工具。接下來通過本文給大家分享Linux下.tar.xz文件的解壓教程詳解,需要的朋友參考下吧
    2017-10-10

最新評論

游戏| 武安市| 怀化市| 阜城县| 翁牛特旗| 黄石市| 亳州市| 辰溪县| 崇义县| 龙州县| 天峨县| 南城县| 巩义市| 临江市| 香港| 盈江县| 育儿| 荣昌县| 孟津县| 页游| 类乌齐县| 方城县| 承德市| 苍梧县| 潜山县| 大埔区| 奉节县| 牙克石市| 弥渡县| 澄江县| 常州市| 墨玉县| 德州市| 鞍山市| 万源市| 石城县| 娱乐| 奉新县| 无极县| 连平县| 甘南县|