1. 程式人生 > >Linux程序監控 + 釘釘通知

Linux程序監控 + 釘釘通知

程序監控指令碼

背景

啟動於正式伺服器的專案,有時會因為某種因素,例如docker記憶體超限因而容器崩潰(前不久就遇過…),如伺服器記憶體不足或IO讀寫異常而崩潰….等等等等。而這些原因,都可能影響到專案的正常執行,嚴重地將會被kill掉。那麼,在伺服器上弄一套程序監控方案就很有必要了!

說明

程序監控採用shell指令碼的形式,結合日常開發使用的CI工具(如Jenkins),再通過Linux伺服器的定時器,定時監控程序,當程序被killed,服務自動重啟。

  • 程序:shell script
  • 整合:Jenkins
  • 打包:Jar

簡單介紹Jenkins

Jenkins 是一個開源專案,提供了一種易於使用的持續整合系統,使開發者從繁雜的整合中解脫出來,專注於更為重要的業務邏輯實現上。同時 Jenkins 能實施監控整合中存在的錯誤,提供詳細的日誌檔案和提醒功能,還能用圖表的形式形象地展示專案構建的趨勢和穩定性。

進入主題

注:install jenkins的過程暫不在本篇介紹,若有時間,會整理出來。

簡單幾句話帶過:

jenkins新建一個需持續整合的maven專案,然後配置了從git拉取原始碼之後,通過執行shell指令碼打包到Linux伺服器執行。

流程

一、Jenkins shell指令碼

示例

PROJECT=online_store
MOD=cms
PORT=9065
IP=xxx
ssh [email protected] sh -xe deploy-production.sh $PROJECT $JOB_NAME $MOD $PORT $IP

解析:
xxx

:根據需要傳該引數,如遠端打包到不同伺服器上,內網 or 公網,對傳輸都會有影響,涉及的東西與本篇側重點不一樣,故不作拓展

yyy:這個IP務必是 deploy-production.sh 指令碼所在的伺服器,至關重要,影響著打包及程序監控,可理解為Jenkins持續整合到Linux伺服器的入口

二、Linux伺服器執行的初始指令碼

注:初始指令碼,言下之意是Jenkins與Linux伺服器互動的第一個指令碼,其餘操作包括監控都與初始指令碼息息相關

由於是博主為公司持續整合寫的指令碼,涉及一些隱私,故不全貼出來,僅貼關鍵部分。

1、接收引數

PROJECT=$1
JOB=$2
MOD=$3 PORT=$4 IP=$5

2、主要流程程式碼根據企業需求不同而編寫不同程式碼,關鍵執行程式碼如下:

nohup /usr/bin/java -jar -Dsun.jnu.encoding=UTF8 -Dfile.encoding=UTF8 -Dspring.profiles.active=production,swagger$MOD $JOB.jar >> /dev/null 2>&1 &

說明:可選擇性開啟swagger。

3、注意注意!!!監控程式碼執行語句…

sh ~/monitor_exec.sh $PROJECT $JOB $MOD $PORT

解析:顯而易見,執行 monitor_exec.sh 指令碼。

三、監控指令碼的初始指令碼

作用:將監控指令碼寫入定時器。

關鍵程式碼:

#!/bin/sh
PROJECT=$1
JOB=$2
MOD=$3
PORT=$4

mkdir -p ~/cron/
touch ~/cron/$PROJECT.cron
file=~/cron/$PROJECT.cron

echo 'cron path:'$file;

if test -s $file; then
  echo "cron檔案內容不為空";
else
  echo "* * * * * sh /root/monitor.sh $PORT $PROJECT $MOD $JOB" >> ~/cron/$PROJECT.cron
  crontab ~/cron/$PROJECT.cron

解析:中間echo的cron path路徑,會輸出到Jenkins日誌裡。目的是將執行 monitor.sh 寫入伺服器定時任務。cron規則就不介紹了,自定義即可。

說明:監控指令碼的執行過程,應該加上日誌輸出,這是好習慣,以便做記錄!

四、重點:監控指令碼

關鍵程式碼

#!/bin/sh
PID=`/usr/sbin/lsof -i:$1 | grep -E 'java|node' | awk '{print $2}'`
PROJECT=$2
MOD=$3
JOB=$4

mkdir -p ~/log
touch ~/log/$PROJECT.log

if test -z "$PID"
then
  echo '後臺自啟動' >> ~/log/$PROJECT.log

  nohup /usr/bin/java -jar -Dsun.jnu.encoding=UTF8 -Dfile.encoding=UTF8 -Dspring.profiles.active=test,swagger$MOD ~/$PROJECT/$JOB.jar >> /dev/null 2>&1 &

  sleep 5
  echo '啟動成功!!!' >> ~/log/$PROJECT.log

else
  echo 'service has been started' >> ~/log/$PROJECT.log
fi

解析:Jar包會運行於伺服器的一個埠上,與其同時也會對應一個程序號,以一定的時間規則去檢查程序號是否存在,判斷不在自啟動即可,邏輯很簡單。

拓展部分:整合釘釘通知

背景:程序被kill,若是企業開發人員想要知道被kill的原因,便會檢視日誌,而通知就很有必要了。由於博主所在企業使用釘釘工作,因此整合在釘釘機器人,可實時通知開發人員。

關鍵程式碼

echo '釘釘通知開始' >> ~/log/$PROJECT.log

curl 'https://oapi.dingtalk.com/robot/send?access_token= xxx ' \
   -H 'Content-Type: application/json' \
   -d '
  {"msgtype": "text",
    "text": {
        "content": "釘釘--- jiayuan 監控測試,killed port:'$1',project:'$PROJECT' has been killed,已重啟"
     }
  }'

  sleep 3
  echo '釘釘通知結束' >> ~/log/$PROJECT.log

說明:
xxx:填上對應釘釘機器人的access_token即可。

注:指令碼現在還一直在迭代,為了讓指令碼更強大、更健壯,我也會一直持續地完善…

相關截圖

日誌

釘釘通知

檢視定時任務

總結

好了,真真真好久沒寫部落格了,最近有些許忙,雖然有好多好多新鮮玩意想寫,但一直沒機會分享!

本篇依舊介紹一直以來頗有興趣的伺服器部分,但架構一個更完善、更健壯的開發體系,還有很多很多東西要學…

相關推薦

Linux程序監控 + 通知

程序監控指令碼 背景 啟動於正式伺服器的專案,有時會因為某種因素,例如docker記憶體超限因而容器崩潰(前不久就遇過…),如伺服器記憶體不足或IO讀寫異常而崩潰….等等等等。而這些原因,都可能影響到專案的正常執行,嚴重地將會被kill掉。那麼,在伺服器

Linux程序監控命令ps詳解

    ps是processes的縮寫,是對當前系統程序進行監控。要對程序進行監測和控制,首先必須要了解當前程序的情況,也就是需要檢視當前程序,ps命令就是最基本程序檢視命令。使用該命令可以確定有哪些程序正在執行和執行的狀態、程序是否結束、程序有沒有殭屍、哪些程序佔用了過多的資源

linux程序監控重啟shell指令碼

本文主要內容: shell日誌date format shell poll監控重新執行,掛了則重啟程式 前段時間工作需要使用python+scrapy寫了個新聞輿情爬蟲系統,伺服器上面跑了大概5

給自己看的Linux程序監控及管理

root 4538 2.8 0.4 51116 8712 pts/2 SL+ 18:59 0:44 mplayer /mnt/usb/music/20080625211631.mp3 /mnt/usb/music/46250194.mp3 /mnt

linux程序監控及管理

程序狀態 Linux 核心:搶佔式多工 程序型別: 守護程序: daemon, 在系統引導過程中啟動的程序, 和 終端無 關程序 前臺程序:跟終端相關,通過終端啟動的程序 注意:兩者可相互轉化 程序狀態: 執行態:runnin

zabbix監控報警配置

釘釘報警 zabbix監控下載golang編寫的釘釘插件(附件中已上傳,可直接下載):修改zabbix server配置文件:vi /usr/local/zabbix/etc/zabbix_server.conf AlertScriptsPath=/usr/local/zabbix/etc/alertscr

持續集成之配置通知

釘釘 clas src pos bsp mage 分享 9.png 技術分享 1、設置釘釘 持續集成之配置釘釘通知

持續集成之 Jenkins 通知(八)

結果 註意 安裝 png block watermark ins 頁面 http 一、前言 最近使用 Jenkins 進行自動化部署,但是發布署後,並沒有相應的通知,雖然有郵件發送通知,但是發現郵件會受限於大家接受的設置,導致不能及時看到相關的發布內容。由於之前有用 Git

用Python實現阿裏機器人讀取數據庫內容自動發群通知

media rep sql查詢 docs ken 由於 false n! 效果 最近想把一些預警數據信息按照一定的要求自動發送到移動端APP,最終把目標放在了騰訊的微信和阿裏的釘釘軟件上,由於剛開始學習python,於是編程工具想用python來實現。微信使用群體最廣,通過

Jenkins配置專案構建後的通知

首先在任意一個釘釘群裡建立自定義的釘釘機器人,然後能夠看到釘釘開放的webhook 複製webhook Jenkins中安裝釘釘外掛,然後在專案的配置當中,構建後操作裡新增釘釘報警 url一般預設已經有了,webhook是token等號後邊的一串數字字母結合的東西。 選擇下邊的報警機制,在相應的情

Jenkins配置項目構建後的通知

image 配置 目的 添加 開放 自定義 任務 web 機制 首先在任意一個釘釘群裏創建自定義的釘釘機器人,然後能夠看到釘釘開放的webhook 復制webhook Jenkins中安裝釘釘插件,然後在項目的配置當中,構建後操作裏添加釘釘報警 url一般默認已經有了,w

linux 動態監控程序

介紹: top 與 ps 命令很相似。它們都用來顯示正在執行的程序。 Top 與 ps 最大的不同之處,在於 top 在執行一段時間可以更新正在執行的的程序。 基本語法: top [選項] 應用例項: 案例 1.監視特定使用者 top:輸入此命令,按回車

重新拾取:TFS2017機器人源代碼簽入通知

jms 多模板 ext part return 通過 list egl 備註 http://www.cnblogs.com/79039535/p/9316791.html 現在很多公司辦公都使用釘釘打卡簽到,於是鑒於公司也使用釘釘就打算用釘釘來做一個源代碼簽入通知。 首

Linux程序管理之動態監控

(1)介紹 top與ps命令很相似。它們都用來顯示正在執行的程序。top與ps最大的不同之處在於,top在執行一段時間可以更新正在執行收到的程序。 (2)語法 top [選項] 選項 作用 -d秒數

jenkins 集成機器人通知

人的 webhook 創建 群組 內部 -a png 完成 auto 公司使用釘釘做為公司內部的通訊工具,所以想通過Jenkins發布完成以後通過釘釘來通知大家,研究發現釘釘提供機器人,所以我把機器人集成進來通知相關人員。 1.創建通知人群組,添加機器人(釘釘默認自帶了配置

Linux程序實時監控監控工具

背景說明: 一、htop是TOP的增強版; 二、dstat 是一個可以取代vmstat,iostat,netstat和ifstat這些命令的多功能產品; 三、perf是一款Linux效能分析工具。Linux效能計數器是一個新的基於核心的子系統,它提供一個性能分析框架,比如硬體(CPU

機器人訊息自動化通知-shell

使用方式:crontab 定時呼叫寫好的,呼叫釘釘webhook的shell指令碼 autonotice.sh curl 'https://oapi.dingtalk.com/robot/send?access_token=158699c2f9bd56f0ef1d13808f620cb1ff

機器人通知

import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.method

python-監控error日誌,實時傳送到

原理用python常連結一個日誌檔案,每當有新的內容寫入,就通過釘釘機器人轉發到群裡 #!/usr/bin/python #-*- coding: utf-8 -* import urllib, urllib2, json import sys, shutil, os, strin

5,Jenkins實戰應用--Jenkins配置專案構建的通知

*系列彙總* 這是一個系列文章,大大小小到今天驚然發現竟然已經累計二十篇了,也就不得不做一個小彙總。回想當初寫第一篇文章的時候,就已經決心事無鉅細,一應認真的走下來,回頭遮望,看著皇皇這麼多文章,一股強烈的成就感就此油然而生,於是便有了這些彙總整理。在這個過程當