Google App Engine + LINE Notify 監控系統即時告警通知(實作篇)

姜志民 2019/05/09 09:52:26
2128

1.前言

接續前一篇「Google App Engine + LINE Notify 監控系統即時告警通知(環境設定篇)」,此篇將說明程式開發。

 

2.建置設定Google App Engine專案

a.點選Google App Engine Standard Java Project…。

 

b.專案設定如下圖。

 

c.點選「File」->「Sign in Google…」。

 

d.選擇欲登入的Google帳號。

 

e.在按「允許」。

 

f.在專案下的WEB-INF目錄下建立一個cron.xml,這是監控系統的執行頻率為五分鐘,內容如下。

 

i. 打開位於WEB-INF目錄下的appengine-web.xml,加入<url-stream-handler>urlfetch</url-stream-handler>這個設定。

 

3.撰寫監控+LINE Notify通知程式碼

a.在專案新增一個class如下圖

 

b.LINE Notify通知程式碼

package tw.com.thinkpower;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

@WebServlet(name = "Thinkpower", urlPatterns = { "/thinkpower" })
public class Thinkpower extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException {
		boolean isOffline = true;
		try {

			// https://www.thinkpower.com.tw/是昕力資訊官網網址。
			Document doc = Jsoup.connect("https://www.thinkpower.com.tw/").get();
			isOffline = false;
		} catch (IOException e) {
			e.printStackTrace();
		}

		if (isOffline) {
			try {
				URL url = new URL("https://notify-api.line.me/api/notify");
				HttpURLConnection connection = (HttpURLConnection) url.openConnection();

				// 6YOUU5CRCZlSFj2htx1X1xeR0VwLmfAoMBnyOKV40是從LINE Notify官網取得的「權杖記錄」。
				connection.addRequestProperty("Authorization", "Bearer " + "6YOUU5CRCZlSFj2htx1X1xeR0VwLmfAoMBnyOKV40");

				connection.setRequestMethod("POST");
				connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
				connection.setDoOutput(true);

				// 發送到筆者的LINE訊息內容。
				String parameterString = new String("message=" + URLEncoder.encode("https://www.thinkpower.com.tw/ 發生異常", "UTF-8"));

				PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
				printWriter.print(parameterString);
				printWriter.close();
				connection.connect();
				connection.getResponseCode();
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ProtocolException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

 

4.部署Google App Engine

a.在專案上按右鍵選擇「Deploy to App Engine Standard」。

 

b.選擇要部署的Google App Engine專案。

 

5.告警通知

如果系統發生異常,LINE Notify就會通知如下圖。

 

姜志民