# Hawk Eye ## **1. Hawk Eye server** hawk eye server는 http 기반의 alert 푸시 및 report을 위한 중계 서버입니다. he-agent 혹은 사용자에 의한 http post Message를 받아 Mthink혹은 Email로 구독 메세지를 보냅니다. ### download 다운로드 URL : https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/hawkeye-server.zip Centos의 경우 아래와 같은 방법들로 download가 가능합니다. curl 을 추천. ``` shell curl -O https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/hawkeye-server.zip wget https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/hawkeye-server.zip ``` ### System Requirement #### Python [python.org](https://www.python.org) **version** python2 (2.7 >= ) #### Database Recommended **SQLite3** or **MariaDB** ----- ### Installation Guide **Recommended** CentOS 7 Install #### CentOS 7 Setup * CenOS 7 을 최소 설치로 설치합니다. * rpm 설치 ``` shell yum upgrade -y yum groupinstall 'Development Tools' -y yum install zlib-devel openssl-devel ``` * pip 설치 ```shell curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py ``` ----- ### Hawkeye user 생성 #### user 생성 ```shell useradd hawkeye su - hawkeye vi .bash_profile ``` ``` export HAWKEYE_HOME=/home/hawkeye/hawkeye-server ``` #### hawkeye server 업로드 및 압축해제 hawkeye-server.zip UPLOAD ```shell unzip hawkeye-server.zip cd $HAWKEYE_HOME ``` ----- ### Python Develoment tool Install ROOT 유저로 실행 #### OS Library ```shell yum install python-devel ``` #### wkhtmltopdf Tool Step 1: Install Dependencies ```shell yum install -y fontconfig libXrender libXext xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi freetype libpng zlib libjpeg-turbo ``` Step 2: Install wkhtmltopdf ```shell curl -O https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm rpm -Uvh wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm ``` Step 3: Testing ```shell wkhtmltoimage --quality 100 http://www.google.com google.jpg ``` #### Python Library Install (HAWKEYE_HOME)으로 이동하여 설치 ```shell cd /home/hawkeye/hawkeye-server pip install -r requirements.txt ``` ----- ### Database Library Install #### Mysql db library mysql 혹은 mariadb 사용시에 설치합니다. ( sqlite3를 그대로 사용하시려면 생략하셔도 됩니다. ) ```shell yum install mysql-devel pip install flask-mysqldb ``` ### Run hawkeye-server #### configuration Hawkeye ```shell > cd $HAWKEYE_HOME/config > vi hawkeye.cfg HOST, PORT, PDF_TOOL 등을 수정합니다. > vi checklist.ini 서버 레포팅 상태체크를 위한 체크리스트 항목을 설정합니다. > vi sendlist.ini 경고 메시지를 받을 항목을 설정합니다. > start.sh ``` ### PDF에 한글이 깨질 경우 ROOT 유저로 ```shell > curl -O http://static.campaign.naver.com/0/hangeul/renew/download/NanumFont_TTF.zip > unzip NanumFont_TTF.zip > mkdir /usr/share/fonts/nanumfont > mv *.ttf /usr/share/fonts/nanumfont > curl -O http://dev.naver.com/frs/download.php/443/ttf-nanum-coding-2.0-2.noarch.rpm > rpm -i ttf-nanum-coding-2.0-2.noarch.rpm ``` ### Config #### sendlist.ini channel_id = 141 token = VEski0KYjy3ZniWGamqwvDT6bp9R6o6IEketBRnG2qYFCYIw3xCzjVd3ndQz5ziNOXx37PLCrYvLIiUJvCbt4J6VAsaMhCiRY6mTpgc3KC47QcnNvL0Un3g293CFwy0i user_ids = dbs019,dbs146 <- 채널내에 해당 사용자만 push 발송 가능 <- 위의 정보는 mthink 관리자에게 문의 하세요 ## **2. he-post** he-post는 he-server로 alert 및 report를 송신하는 에이전트 스크립트 모음입니다. 소스 : https://lab.idatabank.com/gitlab/HawkEye/he-post 다운로드 URL : https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/blob/master/he-post.zip ### 에이전트 사용방법 1. conf/he.ini 파일에 HawkEye Server 호스트명 및 포트, 에이전트명을 등록합니다. ``` AGENT_NAME=sns HE_HOST=lab.idatabank.com HE_PORT=18080 ``` 2. conf/he.ini 파일에 보고서를 보내는 에이전트의 관리정보를 등록합니다. ``` CUSTOMER=(주)데이타뱅크 DEPARTMENT=IS사업부 TASK=개발인프라 HOSTNAME=SNS OS=CentOS 7 DB=Oracle ``` 3. bin 경로 아래에 있는 report 및 alert 스크립트를 cron에 아래와 같은 형대로 등록합니다. (윈도우의 경우 "예약된 작업") ``` # info.sh : Daily Report용 헤더 정보 전송. 30 8 * * * /home/he/bin/info.sh # diskusage.sh : Daily Report용 디스크 사용량 레포트 전송 30 8 * * * /home/he/bin/diskusage.sh # alert_rq.sh : Run Queue(vmstat r) 값을 주기적으로 체크하여 alert 발송 # 매분 수행하여, 값을 초과할 때 alert를 보냅니다. * * * * * /home/he/bin/alert_rq.sh # hb.sh : Hawk Eye Agent HeartBeat script * * * * * /home/he/bin/hb.sh ``` ### Hawk Eye 스크립트 설명. 1. info.sh / info.wsf : 일일 리포트에 출력되는 헤더 정보(고객정보)를 발송하는 스크립트. 일반적으로 1일 1회 발송합니다. 2. hb.sh / hb.wsf : Heart Beat 스크립트, Agent가 동작중임을 나타내는 Heart Beat 신호를 주기적으로 보냅니다. ## Daily Report 스크립트 설명. 날짜별 보고서 데이터를 보내는데 사용합니다. 1. diskusage.sh / diskusage.wsf : OS 디스크 공간 정보를 일일 보고서로 보냅니다. 2. databuffer.sh : 3. datafile.sh : 4. export.sh : 5. hot.sh : 6. library.sh : 7. oracle_databuffer.sh / oracle_databuffer.wsf : 8. tablespace.sh : ### Alert 스크립트 설명 주기적으로 시스템의 중요 체크 포인트를 체크하여, 중요 이벤트 발생이나, 임계값 초과가 발견되면, 경보를 보내는 스크립트. 1. alert_rq.sh : Unix에서 CPU 부하를 나타내는 Run Queue 값을 체크하여, 임계값을 초과하면 alert 발송. ### 추가 스크립트 작성 요령 bin/diskusage.sh 스크립트를 참조하여, 추가로 체크하고 싶은 항목을 스크립트로 작성하여 사용할 수 있습니다. 작성한 스크립트는 lib/\_report.sh 혹은 lib/\_alert.sh 를 통해서 서버로 데이터를 보낼 수 있습니다. 스크립트에서 보내는 값의 성격에 따라 아래와 같이 alert 혹은 report로 보낼 수 있습니다. ``` # 공통부분 시작 # load _precheck.sh PRG="$0" PRGDIR=`dirname "$PRG"` . $PRGDIR/../lib/_precheck.sh # 공통부분 끝 # Alert 전송시. ${HE_HOME}/lib/_alert.sh ${HE_HOST} ${HE_PORT} ${AGENT_NAME} "${LEVEL}" "${MESSAGE}" # Report 전송시. ${HE_HOME}/lib/_report.sh ${HE_HOST} ${HE_PORT} ${AGENT_NAME} "${NAME}" "${CATEGORY}" "${PRIORITY}" "${TYPE}" "${CONTENTS}" ``` ## **3. mysql create table query** ``` sql CREATE TABLE `servers` ( `name` VARCHAR(30) PRIMARY KEY , `index` INTEGER, `data_updated` DOUBLE, `pdf_updated` DOUBLE, `pdf_name` VARCHAR(256) ); CREATE TABLE `informations` ( `id` INTEGER PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(30), `customer` VARCHAR(100), `department` VARCHAR(100), `task` VARCHAR(100), `hostname` VARCHAR(100), `os` VARCHAR(100), `database` VARCHAR(100), `server_name` VARCHAR(30), FOREIGN KEY(server_name) REFERENCES servers(name) ); CREATE TABLE categories ( `id` INTEGER PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(100), `server_name` VARCHAR(30), FOREIGN KEY(server_name) REFERENCES servers(name) ); CREATE TABLE items ( `id` INTEGER PRIMARY KEY AUTO_INCREMENT, `index` INTEGER, `name` TEXT, `category_id` INTEGER, `priority` INTEGER, `status` INTEGER, `type` INTEGER, `contents` TEXT(3000), `option` INTEGER, `server_name` VARCHAR(30), FOREIGN KEY(server_name) REFERENCES servers(name), FOREIGN KEY(category_id) REFERENCES categories(id) ); CREATE TABLE `heartbeats` ( `name` VARCHAR(30) PRIMARY KEY , `beat_time` DOUBLE, `period` INTEGER, `message` TEXT(3000), `status` INTEGER, `modified_on` TIMESTAMP ); CREATE TABLE `he_monitoring_data` ( `id` INTEGER PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(30), `status` INTEGER, `period` INTEGER, `message` TEXT(3000), `update_time` DOUBLE, `modified_on` TIMESTAMP, `server_name` VARCHAR(30), FOREIGN KEY(server_name) REFERENCES servers(name) ); CREATE TABLE `he_message` ( `id` INTEGER PRIMARY KEY AUTO_INCREMENT, `type` INTEGER, `status` INTEGER, `message` TEXT(3000), `occurrence_time` DOUBLE, `modified_on` TIMESTAMP, `server_name` TEXT, FOREIGN KEY(server_name) REFERENCES servers(name) ); CREATE TABLE `he_post_history` ( `id` INTEGER PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(30), `type` INTEGER, `post_time` DOUBLE, `modified_on` TIMESTAMP, `message_id` INTEGER, FOREIGN KEY(message_id) REFERENCES he_message(id) ); ``` ## **3. Hawkeye java agent** Hawkeye java agent ### Startup 환경변수 'JAVA_HOME' 등록 환경변수 'HE_HOME' 등록 (Hawkeye.jar 파일이 위치한 경로) * Windows service.bat - 서비스 등록 및 시작 서비스명: 'Hawkeye-Agent', 시작 유형: '자동' * Etc startup.sh - 시작 shutdown.sh - 중지 ### Config * conf/hawkeye.conf ``` AGENT_NAME=Hawkeye-Agent SERVER_URL=https://server.com:18080 API_KEY=1234 HEARTBEAT_CYCLE=7 REPORTING_TIME=03:05 ALERT_CYCLE=30 ALERT_REPEAT_TIME=30 CUSTOMER= DEPARTMENT= TASK= HOST_NAME= OS_INFO= ``` AGENT_NAME: 에이전트명, 서버의 summary 페이지에서 레포트 구분 [required] SERVER_URL: 서버 주소 [required] API_KEY: 서버와의 통신 인증 키 [required] HEARTBEAT_CYCLE: 서버와의 연결 상태 확인 동작의 실행 간격 (초 단위) [default: 7] REPORTING_CYCLE: 레포팅 실행 간격 (초 단위) [default: 86000] REPORTING_TIME: 레포팅 실행 시간 (HH:MM) [required] ALERT_CYCLE: 얼럿 체크 실행 간격 (초 단위) [default: 30] ALERT_REPEAT_TIME: 얼럿 발생 후 딜레이 간격 (분 단위) [required] * conf/databases.ini ``` [oracle_1] type=oracle url=jdbc:oracle:thin:@server:1521:sid user=system password=manager [MSSQL_1] type=sqlserver driver=com.microsoft.sqlserver.jdbc.SQLServerDriver url=jdbc:sqlserver://172.16.0.140:1433;databaseName=hetestdb user= password= ``` [oracle_1]: 데이터베이스 구분 alias [required] type: 데이터베이스 타입 [required: oracle, sqlserver, mysql, postgresql, cubrid] driver: jdbc driver name [not required] url: jdbc url [required] user: user [required] password: password [required] initialSize: pool init size [default: 3] minIdle: pool min size [default: 3] maxIdle: pool max size [default: 8] maxActive: maxActive size [default: 8] * conf/checklist.ini Report, Alert 정보 설정 ``` [diskusage] enable=true purpose=report data_type=disk script=he_diskusage.sh database=oracle_1 category=Operating System priority=10 [Tablespace Freespace Check] enable=false purpose=all data_type=disk script=he_tablespace.sql database=oracle_1 category=Storage Status priority=10 warning=80 danger=90 period=1 [diskusage] purpose=alert data_type=disk script=he_diskusage.sh warning=80 danger=90 period=1 ``` enable: 사용 여부 [default: true] purpose: job 구분 [report, all, alert] [+ required +] data_type: 데이터 타입 [count, gauge, text, log, disk, disktotal] [+ required +] script: 데이터 타입에 따른 스크립트 파일 명 [required] database: databases.ini 파일의 데이터베이스 alias, db가 하나 일 경우 생략 가능 [not required] category: 레포트의 카테고리, 레포트 일 경우 필수 [not required] priority: 카테고리에서의 우선 순위, 레포트 일 경우 필수 [not required] warning: 경고 기준, 기본 단위: %, 데이터 타입이 disk 일 경우 용량 단위(M,MB,GB) 설정 가능, alert 일 경우 필수 [not required] danger: 위험 기준, 기본 단위: %, 데이터 타입이 disk 일 경우 용량 단위(M,MB,GB) 설정 가능, alert 일 경우 필수 [not required] period: Alert 일 경우, alert cycle: 30 기준으로 period: 1 이면 매 cycle 마다 동작, period: 4 이면 2분 마다 동작 [default: 1] order: 데이터 타입이 count, gauge 일 때 경고 기준을 설정, 높은 값 기준 또는 낮은 값 기준 [not required]