Skip to content
README.md 13.8 KiB
Newer Older
이 종수's avatar
이 종수 committed
# Hawk Eye

이 종수's avatar
이 종수 committed
## **1. Hawk Eye server**
이 종수's avatar
이 종수 committed

hawk eye server는 http 기반의 alert 푸시 및 report을 위한 중계 서버입니다.
he-agent 혹은 사용자에 의한 http post Message를 받아 Mthink혹은 Email로 구독 메세지를 보냅니다.

### download
이 종수's avatar
이 종수 committed
다운로드 URL : https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/hawkeye-server.zip
이 종수's avatar
이 종수 committed
Centos의 경우 아래와 같은 방법들로 download가 가능합니다. curl 을 추천.
이 종수's avatar
이 종수 committed
``` shell
curl -O https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/hawkeye-server.zip
이 종수's avatar
이 종수 committed
wget https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/hawkeye-server.zip
이 종수's avatar
이 종수 committed
```
이 종수's avatar
이 종수 committed

### 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
이 종수's avatar
이 종수 committed
    yum install python-devel zlib-devel openssl-devel -y
이 종수's avatar
이 종수 committed
    ```
    
* pip 설치

    ```shell
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
    python get-pip.py
    ```
    
이 종수's avatar
이 종수 committed
-----	

### Hawkeye user 생성
#### user 생성
```shell
useradd hawkeye
su - hawkeye
이 종수's avatar
이 종수 committed
vi .bash_profile
```
```
export HAWKEYE_HOME=/home/hawkeye/hawkeye-server
이 종수's avatar
이 종수 committed
```

이 종수's avatar
이 종수 committed
#### hawkeye server 업로드 및 압축해제
hawkeye-server.zip UPLOAD
```shell
unzip hawkeye-server.zip
이 종수's avatar
이 종수 committed
cd $HAWKEYE_HOME
이 종수's avatar
이 종수 committed
```

이 종수's avatar
이 종수 committed
-----	
### Python Develoment tool Install
이 종수's avatar
이 종수 committed
ROOT 유저로 실행
이 종수's avatar
이 종수 committed

#### wkhtmltopdf Tool
Step 1: Install Dependencies
```shell
이 종수's avatar
이 종수 committed
yum install -y fontconfig libXrender libXext xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi freetype libpng zlib libjpeg-turbo
이 종수's avatar
이 종수 committed
```
Step 2: Install wkhtmltopdf
```shell
이 종수's avatar
이 종수 committed
curl -O https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
이 종수's avatar
이 종수 committed
rpm -Uvh wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
```
Step 3: Testing
```shell
이 종수's avatar
이 종수 committed
wkhtmltoimage --quality 100 http://www.google.com google.jpg
이 종수's avatar
이 종수 committed
```
이 종수's avatar
이 종수 committed
  
#### Python Library Install
이 종수's avatar
이 종수 committed
(HAWKEYE_HOME)으로 이동하여 설치
이 종수's avatar
이 종수 committed
```shell
이 종수's avatar
이 종수 committed
cd /home/hawkeye/hawkeye-server
이 종수's avatar
이 종수 committed
pip install -r requirements.txt 
```

-----
### Database Library Install
#### Mysql db library

이 종수's avatar
이 종수 committed
mysql 혹은 mariadb 사용시에 설치합니다. ( sqlite3를 그대로 사용하시려면 생략하셔도 됩니다. )
이 종수's avatar
이 종수 committed

```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
	경고 메시지를 받을 항목을 설정합니다.
이 종수's avatar
이 종수 committed
> start.sh
이 종수's avatar
이 종수 committed
```

이 종수's avatar
이 종수 committed
### 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
```
이 종수's avatar
이 종수 committed

이 종수's avatar
이 종수 committed
### Config
#### sendlist.ini
channel_id = 141
token = VEski0KYjy3ZniWGamqwvDT6bp9R6o6IEketBRnG2qYFCYIw3xCzjVd3ndQz5ziNOXx37PLCrYvLIiUJvCbt4J6VAsaMhCiRY6mTpgc3KC47QcnNvL0Un3g293CFwy0i
user_ids = dbs019,dbs146     <- 채널내에 해당 사용자만 push 발송 가능
<- 위의 정보는 mthink 관리자에게 문의 하세요

이 종수's avatar
이 종수 committed

## **2. he-post**
김 덕곤's avatar
김 덕곤 committed

he-post는 he-server로 alert 및 report를 송신하는 에이전트 스크립트 모음입니다.

소스 : https://lab.idatabank.com/gitlab/HawkEye/he-post
이 종수's avatar
이 종수 committed

이 종수's avatar
이 종수 committed
다운로드 URL : https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/blob/master/he-post.zip
김 덕곤's avatar
김 덕곤 committed

### 에이전트 사용방법

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}"
```
이 종수's avatar
이 종수 committed

## **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)
);


```

이 종수's avatar
이 종수 committed
	
박 진우's avatar
박 진우 committed

## **3. Hawkeye java agent**

Hawkeye java agent

박 진우's avatar
박 진우 committed
다운로드 URL : https://lab.idatabank.com/gitlab/HawkEye/hawkeye-product/raw/master/Hawkeye-agent.zip
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
### Directory

```
conf/
  |- template/
  |- hawkeye.conf
  |- databases.ini
  |- checklist.ini
  |- logger.conf
lib/
script/
  |- shell/
  |- sql/
data/
  |- logList.xml
log/
  |- hawkeye.log
Hawkeye.jar
startup.sh
shutdown.sh
hawkeye.bat
service.bat
nssm.exe
```

conf/: 에이전트 설정 파일 폴더

conf/template/: checklist.ini 파일 템플릿 폴더

conf/hawkeye.conf: 에이전트 설정 파일

conf/databases.ini: 데이터베이스 연결 정보 설정 파일

conf/checklist.ini: Report, Alert 체크 리스트 설정 파일

conf/logger.conf: 에이전트 로그 설정 파일

lib/: 에이전트에서 사용하는 jar 파일 폴더

script/: checklist.ini 파일에 설정된 스크립트 파일 폴더

data/logList.xml: checklist.ini 파일 설정 중 데이터 타입이 log 일 때 로그 파일 EOF 기록

log/: 에이전트 로그 저장 폴더, conf/logger.conf 설정에 따라 로그 기록 (default 파일 사이즈 10MB, 로그 파일 개수 5)

Hawkeye.jar: 에이전트 실행 파일

startup.sh: agent start shell

shutdown.sh: agent stop shell

hawkeye.bat: agent start batch

service.bat: agent service add & start

nssm.exe: Windows 서비스 등록, 관리 프로그램, 파일이 존재하지 않으면 서비스 동작하지 않음



박 진우's avatar
박 진우 committed

### Startup

환경변수 'JAVA_HOME' 등록

환경변수 'HE_HOME' 등록 (Hawkeye.jar 파일이 위치한 경로)



* Windows

박 진우's avatar
박 진우 committed
service.bat 파일을 이용하여 서비스 등록 후 서비스 관리자에서 시작 및 종료

서비스명: 'Hawkeye-Agent', 시작 유형: '자동'




서비스 등록 (자동 시작)

박 진우's avatar
박 진우 committed
```
%HE_HOME%\service.bat -install
박 진우's avatar
박 진우 committed
```
서비스 삭제
박 진우's avatar
박 진우 committed
```
박 진우's avatar
박 진우 committed
%HE_HOME%\service.bat -uninstall
```

박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
* Unix, Linux
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
startup.sh, shutdown.sh 파일을 이용하여 시작 및 종료


에이전트 시작

```
$HE_HOME/startup.sh
```

에이전트 종료
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
```
$HE_HOME/shutdown.sh
```
박 진우's avatar
박 진우 committed



### Config

* conf/hawkeye.conf

박 진우's avatar
박 진우 committed
에이전트 설정

박 진우's avatar
박 진우 committed
```
AGENT_NAME=Hawkeye-Agent
SERVER_URL=https://server.com:18080
API_KEY=1234

박 진우's avatar
박 진우 committed
HEARTBEAT_CYCLE=120
박 진우's avatar
박 진우 committed
REPORTING_TIME=03:05
박 진우's avatar
박 진우 committed
ALERT_CYCLE=60
박 진우's avatar
박 진우 committed
ALERT_REPEAT_TIME=30

CUSTOMER=
DEPARTMENT=
TASK=
HOST_NAME=
OS_INFO=
```

박 진우's avatar
박 진우 committed
AGENT_NAME: 에이전트명, 서버의 summary 페이지에서 레포트 구분 [+ required +]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
SERVER_URL: 서버 주소 [+ required +]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
API_KEY: 서버와의 통신 인증 키 [+ required +]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
HEARTBEAT_CYCLE: 서버와의 연결 상태 확인 동작의 실행 간격 (초 단위) [default: 120]
박 진우's avatar
박 진우 committed

REPORTING_CYCLE: 레포팅 실행 간격 (초 단위) [default: 86000]

박 진우's avatar
박 진우 committed
REPORTING_TIME: 레포팅 실행 시간 (HH:MM) [+ required +]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
ALERT_CYCLE: 얼럿 체크 실행 간격 (초 단위) [default: 60]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
ALERT_REPEAT_TIME: 경고 발생 후 다음 경고 까지의 시간 간격 (분 단위) [+ required +]
박 진우's avatar
박 진우 committed
데이터베이스 연결 정보 설정

```
[alias]
type=
driver=
url=
user=
password=
initialSize=
minIdle=
maxIdle=
maxActive=
```

[alias]: 구분 alias, 중복 불가 [+ required +]

type: db type [oracle, sqlserver, mysql, postgresql, cubrid] [+ required +]

driver: jdbc driver name

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]



박 진우's avatar
박 진우 committed
```
[oracle_1]
type=oracle
url=jdbc:oracle:thin:@server:1521:sid
박 진우's avatar
박 진우 committed
user=
password=
박 진우's avatar
박 진우 committed

[MSSQL_1]
type=sqlserver
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
박 진우's avatar
박 진우 committed
url=jdbc:sqlserver://server:1433;databaseName=db
박 진우's avatar
박 진우 committed
* conf/checklist.ini
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
Report, Alert 정보 설정
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
```
[alias]
enable=
purpose=
data_type=
script=
database=
category=
priority=
warning=
danger=
period=
order=
```
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
[alias]: 구분 alias, 중복 불가 [+ required +]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
enable: 사용 여부 [default: true]

purpose: job 구분 [report, all, alert] [+ required +]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
data_type: 데이터 타입 [count, gauge, text, log, disk, disktotal] [+ required +]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
script: 데이터 타입에 따른 스크립트 파일 명 [+ required +]
박 진우's avatar
박 진우 committed

박 진우's avatar
박 진우 committed
database: databases.ini 파일의 데이터베이스 alias, db가 하나 일 경우 생략 가능

category: 레포트의 카테고리, 레포트 일 경우 필수

priority: 카테고리에서의 우선 순위, 레포트 일 경우 필수

warning: 경고 기준, 기본 단위: %, 데이터 타입이 disk 일 경우 용량 단위(M,MB,GB) 설정 가능, alert 일 경우 필수

danger: 위험 기준, 기본 단위: %, 데이터 타입이 disk 일 경우 용량 단위(M,MB,GB) 설정 가능, alert 일 경우 필수

period: Alert 일 경우, alert cycle: 30 기준으로 period: 1 이면 매 cycle 마다 동작, period: 4 이면 2분 마다 동작 [default: 1]

order: 데이터 타입이 count, gauge 일 때 경고 기준을 설정, 높은 값 기준 또는 낮은 값 기준
박 진우's avatar
박 진우 committed



```
[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
```