개발/개발관련

[개발관련] n8n 점검 로직

mabb 2023. 5. 22. 10:57
반응형

n8n 점검 로직


1. Cron 노드
-Every Day/ 8Hour/ 25Minute

 ㄴ. 매일 8시 25분에 실행한다.

2. Excute Command2 노드
-Excute Once
-Command
: CHCP 65001 | ping -n 10 abc.abcd.co.kr

 ㄴ.한번만 실행. UTF-8인코딩 으로 ping을 10번 수행한다.
 ㄴ.Command 의 콘솔 출력 값이 다음 노드에 전달되는 것으로 보인다. 

3. IF2 노드
-Condition: String
-Value1:
-Operation: Contains
-Value2: TTL=
-Boolean
-Number
-Combine: ALL

ㄴ. 문자열 'TTL=' 을 포함하면 true, 포함하지 않으면 false

true -> 다음 단계 진행
false-> 
Send Email12 노드
-Credential for SMTP: SMTP accout
-From Email: n8n@abcd.co.kr
-To Email: abc@abcd.co.kr
-Subject: 실패
-Text: 
-HTML:  

<b>ping 오류 (서버접속오류)</b>
<br>
===============================================================================================<br>
error : <br>
{{$json["error"]}}
===============================================================================================<br>
stderr : <br>
{{$json["stderr"]}}
===============================================================================================<br>

 



ㄴ. HTML 내용으로 이메일을 발송한다.

4. Function1 노드
-Javascript Code:

var nAverage = '';

for (item of items) {  
  var arr = items[0].json.stdout.split('Approximate round trip');
  console.log("arr : " + arr.length);
  console.log("arr : " + arr[0]);
  console.log("arr : " + arr[1]);
  if(arr.length == 2){
      var arr1 = arr[1].split('ms');
      for (arritem of arr1) {  
          if(nAverage != '') break;
          if(arritem.lastIndexOf('Average = ') > -1)
          {
            console.log("Average =[" + arritem.substr(arritem.lastIndexOf('Average = '), arritem.length) + "]");
            nAverage = arritem.substr(arritem.lastIndexOf('Average = ')+10, arritem.length);
            items[0].json.Average = nAverage;
            break;
          }      
      }    
  } 
}

// You can write logs to the browser console
console.log('Done!=>'+ nAverage);
return items;


ㄴ. Average = 에서 수치를 뽑아내기 위한 파싱 과정

ping결과를 파싱




5. IF8 노드
-Condition: Number
-Value1:
-Operation: Smaller
-Value2: 100
-Combine: ALL

true -> 다음 단계 진행
false ->
Send Email11 노드
-HTML:

서버 평균 응답 속도 결과 (평균 응답속도 100 ms 이상이면 비정상 )
<br>
===============================================================================================<br>
error : <br>
{{$json["error"]}}
===============================================================================================<br>
stderr : <br>
{{$json["stderr"]}}
===============================================================================================<br>



ㄴ. HTML 내용으로 이메일을 발송한다.

6.tcping Command 노드
-Excute Once
-Command
: tcping -h abc.abcd.co.kr 443

7.IF 노드
-Condition: String
-Value1:
-Operation: Contains
-Value2: open
-Combine: ALL

true -> 다음 단계 진행
false ->
Send Email2
-HTML:

네트워크 결과 :  WAS 다운 상태
<br>
===============================================================================================<br>
error : <br>
{{$json["error"]}}
===============================================================================================<br>
stderr : <br>
{{$json["stderr"]}}
===============================================================================================<br>



ㄴ. HTML 내용으로 이메일을 발송한다.

8.tcping Function
-javaScript Code:

var nAverage = '';


for (item of items) {  
  var arr = items[0].json.stdout.split('Approximate trip');
  console.log("arr : " + arr.length);
  console.log("arr : " + arr[0]);
  console.log("arr : " + arr[1]);
  if(arr.length == 2){
      var arr1 = arr[1].split('ms');
      console.log("arr1의 길이 " + arr1.length);
      console.log("arr1 => " + arr1);
      for (arritem of arr1) {  
          if(nAverage != '') break;
          console.log("arritem : " + arritem + ": arritem.indexOf[" + arritem.indexOf('Average = ', 0) + "]");
          if(arritem.lastIndexOf('Average = ') > -1)
          {
            console.log("Average =[" + arritem.substr(arritem.lastIndexOf('Average = ')+10, arritem.length) + "]");
            nAverage = arritem.substr(arritem.lastIndexOf('Average = ')+10, arritem.length);
            console.log("nAverage 1 =>" + nAverage);
            
            nAverage = nAverage.substr(0, nAverage.lastIndexOf('.'));
            //console.log("nAverage 2 =>" + nAverage);
            items[0].json.Average = nAverage;
            break;
          }      
      }    
  } 
}



// You can write logs to the browser console
console.log('Done!=>'+ nAverage);
return items;

tcping 결과를 파싱



9. IF9 노드
-Condition: Number
-Value1: 
-Operation: Smaller
-Value2: 100
-Combine: ALL

true -> 다음 단계 진행
false ->
Send Email3 노드
-HTML:

네트워크 결과 :  평균 응답속도 100ms 이상
<br>
===============================================================================================<br>
error : <br>
{{$json["error"]}}
===============================================================================================<br>
stderr : <br>
{{$json["stderr"]}}
===============================================================================================<br>



ㄴ. HTML 내용으로 이메일을 발송한다.


10. HTTP Request 노드
-Authentication: None
-Request Method: Get
-URL: abc.abcd.co.kr
-Ignore SSL Issues: none
-Response Format: String
-Property Name: data
-JSON/RAW Parameters: none
-Options: no
-Headers: no
-Query Parameters: no

11.IF 1 노드
-Condition: String
-Value1: 
-Operation: Contains
-Value2: DB접속성공
-Combine: ALL

true ->  최종 성공 메일 발송
Send Email1 노드
-HTML:

[data]<br>
{{$node["HTTP Request"].json["data"]}}<br>
[stdout]<br>
{{$node["HTTP Request"].json["stdout"]}}<br>
[name]<br>
{{$node["HTTP Request"].json["error"]["name"]}}<br>
[message]<br>
{{$node["HTTP Request"].json["error"]["message"]}}<br>
[stack]<br>
{{$node["HTTP Request"].json["error"]["stack"]}}<br>
[tcping Command]<br>
{{$node["tcping Command"].json["stdout"]}}



ㄴ. HTML 내용으로 이메일을 발송한다.


false ->  최종 실패 메일 발송
Send Email 노드
-HTML:

DB 접속 결과 : 실패
<br>
===============================================================================================<br>
[data]<br>
{{$node["HTTP Request"].json["data"]}}<br>
[stdout]<br>
{{$node["HTTP Request"].json["stdout"]}}<br>
[name]<br>
{{$node["HTTP Request"].json["error"]["name"]}}<br>


ㄴ. HTML 내용으로 이메일을 발송한다.





반응형