꼬반 Blog

[nodejs / pageres] 웹 서비스 상태 확인하기

회사에서 관리하는 웹 서비스가 약 40개 가량 되다보니 모니터링이나 관리가 필요하여 어제, 오늘 간단하게 만들어보았습니다. 물론 해당 서버들에는 nagios 나 whatap, whatsup 등으로 모니터링을 하고 있고 서비스가 다운되면 메일로 알림이 오긴 하지만 아무래도 한눈에 지금 사이트들이 다 정상인지 아닌지 확인하기는 좀 어려운 부분이 있는건 사실입니다. 그래서 다음과 같은 요구 사항을 가지고 만들었습니다. 1. 모니터링 도메인의 추가/삭제 가능2. 해당 도메인의 현재 상태 (response 응답 코드) 확인 가능 (대시보드에 접속했을때 동작) 3. 해당 사이트에 메인 페이지 스크린샷 저장 가능 일단은 위 요구사항을 기본으로 다음과 같이 작성하였습니다. URL 부분은 가려두었습니다. 액션부분은 아직..

Read More

[nodejs / pageres] 웹 서비스 상태 확인하기

회사에서 관리하는 웹 서비스가 약 40개 가량 되다보니 모니터링이나 관리가 필요하여


어제, 오늘 간단하게 만들어보았습니다.


물론 해당 서버들에는 nagios 나 whatap, whatsup 등으로 모니터링을 하고 있고


서비스가 다운되면 메일로 알림이 오긴 하지만


아무래도 한눈에 지금 사이트들이 다 정상인지 아닌지 확인하기는 좀 어려운 부분이 있는건 사실입니다.


그래서 다음과 같은 요구 사항을 가지고 만들었습니다.


1. 모니터링 도메인의 추가/삭제 가능

2. 해당 도메인의 현재 상태 (response 응답 코드) 확인 가능 (대시보드에 접속했을때 동작)

3. 해당 사이트에 메인 페이지 스크린샷 저장 가능


일단은 위 요구사항을 기본으로 다음과 같이 작성하였습니다.



URL 부분은 가려두었습니다. 액션부분은 아직 미정인 부분입니다.


메인에 접속하면 모니터링 대상 도메인을 불러와 상태를 확인하고 해당 스크린샷을 찍어서 테이블로 뿌려줍니다.


ui는 bootstrap / nodejs, express, pageres 가 주 모듈이고, DB는 사용하지 않습니다.


개선 사항으로는


1. 스크린샷에서 확인되는 것 처럼 NO가 정렬되지 않고 노출되는 부분에 대한 수정

2. 스크린샷이 현재 시점으로 저장되는데 날짜와 시간을 파일명에 추가하여 이력관리가 가능하도록 할 것

3. 액션 추가 (왼쪽 메뉴의 관리, 이력 포함)


정도가 있습니다. 추후 수정하겠죠.. 아마...


주요 소스는 아래와 같습니다.


index.js - router

router.get('/', function(req, res) { fs.readFile('../url.list', 'utf8', function (err, data) { var array_url = data.split("\n"); res.header("Access-Control-Allow-Origin" , "*"); res.render('index', { result: array_url }); }); }); router.get('/load', function(req, res) { fs.readFile('../url.list', 'utf8', function (err, data) { var array_url = data.split("\n"); res.header("Access-Control-Allow-Origin" , "*"); res.send(array_url); }); }); router.post('/check', function(req, res) { var body = req.body; //console.log(body.t_url); check.checkUrlStatus(body.t_url, function(result) { //console.log(result); res.header("Access-Control-Allow-Origin" , "*"); res.send(result+" : "+body.cnt); }); });


checkUrl.js

/**
 * Created by ggoban on 16. 1. 4.
 */
var http = require('http'),
    url = require('url'),
    Pageres = require('pageres');
    require('events').EventEmitter.defaultMaxListeners = Infinity;

exports.checkUrlStatus = function (Url, callback) {
        var options = {
            method: 'GET',
            host: url.parse(Url).host,
            port: 80,
            path: url.parse(Url).pathname
        };

        var pageres = new Pageres({delay: 2})
            .src(Url, ['1024x768'])
            .dest(__dirname+'/public/screenshot');
        pageres.run(function (err) {
            if (err) {
                throw err;
                console.log(err);
            }
            console.log('done');
        });

        http.get(options, function (res) {
            //console.log(options);
            //console.log(res.statusCode);
            callback(options.host+options.path+" : "+res.statusCode);
        }).on('error', function(e) {
            //console.log(options);
            //console.log(e.message);
            callback(options.host+options.path+" : "+ e.message);
        });

}

위 버전은 현재 standalone 버전으로 작성해두었고 원래 진행하고 있는 satm쪽으로 모듈을 추가할 예정입니다.


월, 화 이틀동안 급조하느라 소스가 매우 허접합니다. ㅠ _ㅠ 혹시나 해당 포스팅을 보시게 되면 가감없이


수정할 부분이나 부족한 부분에 대해 지적해주시면 매우 감사하겠습니다.

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post