꼬반 Blog

[ELK] ELK를 활용한 웹 로그 모니터링 시스템 - 1

회사에서 웹 서버의 로그 수집 및 분석을 위해 2015년 말 부터 ELK Stack과 TICK+Grafana Stack으로 웹 서버 및 주요 서버, 서비스의 로그 수집 및 대시보드를 통한 모니터링을 활용해 왔다. 다만 ELK는 당시에는 버전이 낮았고 성능이나 사용적인 부분에서 InfluxDB 보다 불편함을 느껴 지금까지 주로 TICK을 사용해왔다. ELK는 1.X에서 2.X로, 그리고 5.X로 마이그레이션을 하며 사용은 했었지만 제대로 활용하진 않았다. 얼마전 Elastic Tour 2017 Seoul 에 참석하여 6.X ELK를 보니 다시 한번 제대로 사용해보자는 생각이 들어 처음부터 새로 구축하기로 하였다. 이 글은 간단한 설치 및 구성과 logstash, filebeat 를 통한 로그 수집, 필터 ..

Read More

[docker] ova to docker img 변환하기

이번에 회사에서 일을 하면서 ova 파일로 교육을 진행하게 되었다. 그런데 ova파일은 아무래도 실습, 교육환경을 준비하는게 매우 번거로워서 도커 컨테이너로 바꿀수 있는지 찾아보았다. 결과부터 적어보자면 변환도 가능하고 정상적으로 실행도 해보았으나 중간 처리 과정에 시간이 꽤 걸려서 실제 사용을 하기엔 어려워 보였지만 기록을 남긴다. 대상 ova : 30Gimport 용량 : 60G 1. ova 파일을 tar xvf 로 압축을 해제2. 안에 포함된 .vmdk 파일을 qemu-img 를 통해 raw 파일로 변환3. 변환한 raw 파일을 guest 를 이용하여 가상 filesystem 으로 마운트 후 처리과정4. 변환된 파일을 docker import 를 통해 img 로 등록5. 등록한 img 파일을 실행...

Read More

[LineageOS] 커스텀 롬 사용해보기!

내게는 현재 메인 폰으로는 Nexus 6P를 사용하고 있다. 구글 레퍼런스다 보니 최신 OS가 바로바로 업데이트 되는것이 제일 맘에 들었고 통신사 앱이 설치되지 않는점도 마음에 들었다. 그래서 앞으로도 핸드폰은 쭉 구글 레퍼런스를 쓰지 않을까 싶다. 그리고 얼마전에 산 아이패드 pro 10.5를 메인 디바이스로 사용한다. 마지막으로 Nexus 6P를 쓰기전 중고로 잠시 사용하던 삼성 갤럭시 S5 LTE-A 모델. 현재는 액정 보호 유리가 나가고 더이상 업뎃도 안되고 느린거 같아 한번 커스텀롬을 올려보고자 정보를 찾아보고 기록을 남긴다. 참고는 많은 사이트가 있었으나 다음 사이트가 제일 도움이 되었다. 참고 : http://blog.naver.com/PostView.nhn?blogId=kykint&logN..

Read More

[Golang] Golang으로 Naver TTS (Clova Speech Synthesis API) 사용하기

Naver TTS API를 사용하기 위해서는 먼저 아래 링크를 참고하여 API 이용신청을 먼저 해야 한다. https://developers.naver.com/docs/clova/api/#/CSS/API_Guide.md#clova-speech-synthesis-api-가이드 이후 발급받은 키와 시크릿 키를 가지고 진행한다. 위 가이드에는 Golang 구현 예제가 없어 아래와 같이 테스트 해보았다. (소스는 테스트 목적으로 허접...) 다른 언어들의 경우 대부분 위 링크에 나와 있으니 참고할 것. 123456789101112131415161718192021222324252627282930313233343536373839404142434445package main import ( "bytes" "fmt" "..

Read More

TTS API 테스트 기

TTS API 관심이 있어서 (영어 재생) Google, Naver, Voice RSS 3개 테스트를 해보았는데 Naver의 API 영어 TTS 가 생각보다 품질이 훌륭해서 놀랐음. Google, Voice RSS 쪽도 나쁘진 않고 Voice RSS 는 미국, 영국, 호주 버전이 존재해서 선택지가 다양한데 Naver는 일단 여성, 남성만 선택이 가능 하긴 하나 생각보다 괜찮음.. 테스트 한 이유는 토익 공부하며 오답노트 웹앱을 만드는데 뷰는 Vue.js 로 작업 / 백엔드는 Golang 으로 해당 웹앱에 접속하면 입력해둔 틀린 문제 중 임의로 한문제가 나오고 해당 문제를 풀도록 되어 있다. 일반적인 문법은 큰 문제가 없는데.. LC는 어떻게 할까 생각해보다가 TTS API를 테스트 해본것. Naver 구..

Read More

[Vue.js] vue-material 사용시 event bubbling 문제 해결

Vue에서 ui framework 으로 사용하는 vue-material 에는 작은 버그가 있다. md-radio 를 포함한 input 모듈에 label 에도 click 이벤트가 걸려있어서 라벨쪽을 클릭하면 이벤트 버블링이 발생하는 것. 해당 에러를 검색해보니 얼마전 vue-material git hub 에 논의 된 내용이 있었다. (몇일만 일찍 봤으면 이 이슈는 내것이었을 텐데 ㅂㄷㅂㄷ) https://github.com/vuematerial/vue-material/pull/954https://github.com/vuematerial/vue-material/pull/954/commits/1e345ee850100269deec2821bd208633811383d0 이걸 보고 해결하기 위해서는 아직 공식 rel..

Read More

Nginx, GeoIP, Grok Pattern, InfluxDB, Telegraf, WroldMap, Grafana 연동 삽질기

각 서비스의 접속 지역을 확인하기 위해 Nginx 를 1.13.3 으로 소스 재컴파일을 하였고 GeoIP Module 을 설치하였으며 (이와중에 dependancy 로 설치된 nginx 때문에 소스 컴파일 한 nginx 가 영향을 받아 스크립트가 정상동작 하지 않는 부분이 발생.. 하여 system service daemon 을 수정하여 정상 동작 확보 - bin 파일을 rpm 의 nginx 가 아닌 source build 된 nginx 로 실행 위치 변경) 이후 grafana 에 world map plugin 을 설치하고 지도에 표시하느라 쿼리와 telegraf, influxdb 에 nginx log 넣느라 삽질 삽질 하다가 어 됬다! 하고 좋아했다. (지난번 포스트) 그런데 몇일 후 보니.. 다시 정..

Read More

Nginx, GeoIP, Telegraf, Influxdb, Grafana 연동!

회사에서 사용하고 있는 웹 서비스의 구성은 간단하게 다음과 같다. Nginx (리버스 프록시 서버) --- WAS (각 어플리케이션 서버) --- 백엔드 (DB, 스토리지 등) 여기서 유저는 가장 상단의 Nginx 서버에만 접근이 가능하다. 이러한 구성은 기본적으로 보안이나 관리 등에 용이하다. 그리고 각 서버들의 상태 모니터링 및 로그 수집을 위해 2가지 시스템을 혼용하여 사용하는데 ELK 와 TICK 이 바로 그것이다. ELK는 Elasticsearch, Logstash, Kibana 를 지칭하는데 과거 버전에서 5.x 버전으로 업그레이드를 하면서 이 로그 수집방식이 Logstash-forward 대신에 beat 로 대체 되었다. 그래서 각 단말에 beat가 서버의 로그를 수집하여 Elasticsea..

Read More

[Slack] Slack-Bot 으로 웹 서비스 모니터링 하기

회사에서는 다양한 방식으로 모니터링을 하고 있다. 일단 기본적으로 Nagios로 전반적인 서비스와 하드웨어 등을 모니터링 하고 있고 외부 모니터링 도구로 whatap.io 로 서버와 중요 url 5개(무료 제한) 를 모니터링 하고 있다. 각 서버 로그는 telegraf - influxdb - grafana / filebeat - elastic - kibana 로 이중화 하여 수집 및 모니터링을 하고 있다. 그럼에도 불구하고 안정적인 서비스를 위한 모니터링에는 끝이 없다. 그래서 이번에 Slack-Bot 을 활용하여 웹 서비스를 간편하게 체크할 수 있도록 해보았다. 먼저 개발은 다음과 같은 환경으로 진행하였다. 1. 웹 서비스 40개의 status code 와 응답시간을 체크 -> Golang 으로 개발 ..

Read More

[vSphere] vmdk 파일 복구 방법

운영 환경 : vSphere 5.5장애 이유 : esxi 호스트 리부트 후 disk description 파일인 vmdk 파일이 보이지 않음. 때문에 해당 vm을 켤 수 없는 상황 (error 18) 복구 방법 : https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1002511 해당 datastore 에 접속하여 cli로 작업 # ls -l target-flat.vmdk vmdk size nnnnnnn # cat target.vmx scsi0.virtualDev = "type" # vmkfstools -c nnnnnnn -a type -d thin temp.vmdk # rm -i tem..

Read More

[ELK] ELK를 활용한 웹 로그 모니터링 시스템 - 1

회사에서 웹 서버의 로그 수집 및 분석을 위해 2015년 말 부터 ELK Stack과 TICK+Grafana Stack으로


웹 서버 및 주요 서버, 서비스의 로그 수집 및 대시보드를 통한 모니터링을 활용해 왔다.


다만 ELK는 당시에는 버전이 낮았고 성능이나 사용적인 부분에서 InfluxDB 보다 불편함을 느껴


지금까지 주로 TICK을 사용해왔다.


ELK는 1.X에서 2.X로, 그리고 5.X로 마이그레이션을 하며 사용은 했었지만 제대로 활용하진 않았다.


얼마전 Elastic Tour 2017 Seoul 에 참석하여 6.X ELK를 보니 다시 한번 제대로 사용해보자는 생각이 들어


처음부터 새로 구축하기로 하였다. 


이 글은 간단한 설치 및 구성과 logstash, filebeat 를 통한 로그 수집, 필터 처리, kibana를 통한


대시보드 작성을 진행과정에 따라 적어보고자 한다.


1.  ELK Stack 설치


1.1. 설치 버전 : 6.1.1


1.2. 준비 사항 : Docker CE 17.12 / docker-compose 1.18 / Golang 1.5 이상


1.3. 쉽게 사용하기 위해 Docker, Docker-compose 를 통해 elk-cluster 를 구축하려면 다음과 같이 docker-compose.yml 파일을

     사용하여 클러스터를 올린다. 몇몇 세부 옵션들은 yml 파일을 수정하여 사용한다.


version: '2.2'

services:

  elasticsearch1:

    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1

    container_name: elasticsearch1

    environment:

      - cluster.name=kobic-elk-docker-cluster

      - bootstrap.memory_lock=true

      - "ES_JAVA_OPTS=-Xms4096m -Xmx4096m"

    ulimits:

      memlock:

        soft: -1

        hard: -1

    volumes:

      - esdata1:/usr/share/elasticsearch/data

    ports:

      - 9200:9200

    networks:

      - esnet

  elasticsearch2:

    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1

    container_name: elasticsearch2

    environment:

      - cluster.name=kobic-elk-docker-cluster

      - bootstrap.memory_lock=true

      - "ES_JAVA_OPTS=-Xms2048m -Xmx2048m"

      - "discovery.zen.ping.unicast.hosts=elasticsearch1"

    ulimits:

      memlock:

        soft: -1

        hard: -1

    volumes:

      - esdata2:/usr/share/elasticsearch/data

    networks:

      - esnet

  kibana:

    image: docker.elastic.co/kibana/kibana:6.1.1

    container_name: kibana

    environment:

      SERVER_NAME: kibana.kobic.re.kr

      ELASTICSEARCH_URL: http://localhost:9200

    ports:

      - 5601:5601

    networks:

      - esnet

  logstash:

    image: docker.elastic.co/logstash/logstash:6.1.1

    container_name: logstash

    environment:

      XPACK_MONITORING_ELASTICSEARCH_URL: http://localhost:9200

    ports:

      - 5044:5044

    networks:

      - esnet

    depends_on: ['elasticsearch1']


volumes:

  esdata1:

    driver: local

  esdata2:

    driver: local


networks:

  esnet:


위 파일이 위치한 곳에서 docker-compose up 명령어를 통해 서비스를 올리면 해당 이미지들을 pulling 하고 기다리면


각 컨테이너가 실행이 된다. 그후 브라우저에서 localhost:5601 로 접속하면 kibana에 접속할수 있고 모니터링 탭을 통하여


각 elk node, kibana, logstash 의 상태를 확인할 수 있다.

반응형

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

[docker] ova to docker img 변환하기

이번에 회사에서 일을 하면서 ova 파일로 교육을 진행하게 되었다.


그런데 ova파일은 아무래도 실습, 교육환경을 준비하는게 매우 번거로워서


도커 컨테이너로 바꿀수 있는지 찾아보았다.


결과부터 적어보자면 변환도 가능하고 정상적으로 실행도 해보았으나 중간 처리 과정에 


시간이 꽤 걸려서 실제 사용을 하기엔 어려워 보였지만 기록을 남긴다.


대상 ova : 30G

import 용량 : 60G


1. ova 파일을 tar xvf 로 압축을 해제

2. 안에 포함된 .vmdk 파일을 qemu-img 를 통해 raw 파일로 변환

3. 변환한 raw 파일을 guest 를 이용하여 가상 filesystem 으로 마운트 후 처리과정

4. 변환된 파일을 docker import 를 통해 img 로 등록

5. 등록한 img 파일을 실행.


위 순서로 진행되었다.


30G 파일은 qemu-img 를 통해 50G 파일의 .img 파일로 변환

이 파일은 guest 를 통해 16G 파일로 변환 됨

16G 파일은 docker import 후 31.3GB 이미지로 등록 됨


docker import 시 docker의 기본 device mapper 용량은 10G로 되어 있어서

import 해주려면 dockerd 옵션에  dockerd --storage-opt dm.basesize=60G 로 실행 시켜줘야 한다. 물론 이전 처리 과정도 있음


참고 : https://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/


다만 위 과정은 기존 컨테이너, 이미지 등이 모두 지워지므로 주의해야 한다.


변환을 위해 참고한 주소


참고 : https://stackoverflow.com/questions/31321076/how-to-convert-a-vagrant-box-to-a-docker-image

참고 : http://noizbuster.github.io/2016/04/20/2016-04-20-ova-to-dockerimg/2016-04-20-ova-to-dockerimg/

참고 : https://blog.inslash.com/how-to-convert-vmdk-to-a-docker-image-be939745ed8a


결론 : 처음부터 도커로 작업을 하자.


반응형

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

[LineageOS] 커스텀 롬 사용해보기!

내게는 현재 메인 폰으로는 Nexus 6P를 사용하고 있다.


구글 레퍼런스다 보니 최신 OS가 바로바로 업데이트 되는것이 제일 맘에 들었고


통신사 앱이 설치되지 않는점도 마음에 들었다.


그래서 앞으로도 핸드폰은 쭉 구글 레퍼런스를 쓰지 않을까 싶다.


그리고 얼마전에 산 아이패드 pro 10.5를 메인 디바이스로 사용한다.


마지막으로 Nexus 6P를 쓰기전 중고로 잠시 사용하던 삼성 갤럭시 S5 LTE-A 모델.


현재는 액정 보호 유리가 나가고 더이상 업뎃도 안되고 느린거 같아


한번 커스텀롬을 올려보고자 정보를 찾아보고 기록을 남긴다.


참고는 많은 사이트가 있었으나 다음 사이트가 제일 도움이 되었다.


참고 : http://blog.naver.com/PostView.nhn?blogId=kykint&logNo=220778832122


준비.


미리 핸드폰 개발자 옵션 활성화 / USB 디버깅 모드 설정


Odin3 : Odin3_v3.12.3 Official Samsung 버전 https://odindownload.com/download/#.Wc2YGDeRUUE


TWRP : twrp-3.1.0-0-lentislte.img.tar https://dl.twrp.me/lentislte/twrp-3.1.0-0-lentislte.img.tar.html

(twrp 는 이유는 알수 없지만 이 상위 버전들 3.1.0-2 / 3.1.1-0 / 3.1.1-1 / 3.1.1-2 가 동작하지 않아 3.1.0-0 사용)


LineageOS : lineage-14.1-20170927-nightly-lentislte-signed.zip https://download.lineageos.org/lentislte


OpenGAPPS : ARM 7.1 pico version http://opengapps.org/


을 사용했다.


그 후 Odin 은 Auto reboot 옵션은 해제하고 사용하여 성공적으로 커스텀 롬을 올렸다.

반응형

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

[Golang] Golang으로 Naver TTS (Clova Speech Synthesis API) 사용하기

Naver TTS API를 사용하기 위해서는 먼저 아래 링크를 참고하여 API 이용신청을 먼저 해야 한다.


https://developers.naver.com/docs/clova/api/#/CSS/API_Guide.md#clova-speech-synthesis-api-가이드


이후 발급받은 키와 시크릿 키를 가지고 진행한다.


위 가이드에는 Golang 구현 예제가 없어 아래와 같이 테스트 해보았다. (소스는 테스트 목적으로 허접...)


다른 언어들의 경우 대부분 위 링크에 나와 있으니 참고할 것.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package main
 
import (
    "bytes"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
 
    "github.com/gin-gonic/gin"
)
 
func main() {
 
    router := gin.Default()
 
    router.GET("/tts", func(c *gin.Context) {
        api_uri := "https://openapi.naver.com/v1/voice/tts.bin"
        client_key := "api_key"
        client_secret := "api_secret"
 
        data := url.Values{}
        data.Set("speaker""clara")
        data.Add("speed""0")
        data.Add("text""Hello, Clara.")
 
        client := &http.Client{}
        req, _ := http.NewRequest("POST", api_uri, bytes.NewBufferString(data.Encode()))
        req.Header.Add("Content-Type""application/x-www-form-urlencoded; charset=UTF-8")
        req.Header.Add("X-Naver-Client-Id", client_key)
        req.Header.Add("X-Naver-Client-Secret", client_secret)
 
        resp, _ := client.Do(req)
        fmt.Println(resp.Status)
 
        defer resp.Body.Close()
        out, _ := os.Create("out.mp3")
        io.Copy(out, resp.Body)
 
        c.JSON(http.StatusOK, gin.H{
            "result""ok",
        })
    })
}
cs


이걸 테스트 한 목적은 이전 글에서 작성한 것처럼 토익 공부 중에 오답노트 웹앱을 만드는데


LC를 어떻게 하면 좋을까 생각하다가 TTS API를 활용해보기로 한것.


Golang 을 백엔드로 사용하고 있기 때문에 Golang 으로 구현해보았고 이걸 이용해서 LC 오답문제를


불러오면 해당 메세지를 위 api로 mp3로 변환 후 재생해줄 예정이다. 


다만 미흡한 점이 메세지가 바로 바로 재생되고 중간에 스페이스로 메세지간에 공백을 넣어도 문장 간 여백을


설정할 수 없는 점이 있다. 아쉬운 부분이 있지만 Naver TTS API 품질이 생각보다 만족스러워서 다행이다.


참고 링크

https://stackoverflow.com/questions/19253469/make-a-url-encoded-post-request-using-http-newrequest

https://stackoverflow.com/questions/16311232/how-to-pipe-an-http-response-to-a-file-in-go

http://golang.site/go/article/103-HTTP-POST-%ED%98%B8%EC%B6%9C


반응형

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

TTS API 테스트 기

TTS API 관심이 있어서 (영어 재생)


Google, Naver, Voice RSS 3개 테스트를 해보았는데


Naver의 API 영어 TTS 가 생각보다 품질이 훌륭해서 놀랐음.


Google, Voice RSS 쪽도 나쁘진 않고 Voice RSS 는 미국, 영국, 호주 버전이 존재해서


선택지가 다양한데 Naver는 일단 여성, 남성만 선택이 가능 하긴 하나


생각보다 괜찮음..


테스트 한 이유는


토익 공부하며 오답노트 웹앱을 만드는데 


뷰는 Vue.js 로 작업 / 백엔드는 Golang 으로 해당 웹앱에 접속하면 


입력해둔 틀린 문제 중 임의로 한문제가 나오고 해당 문제를 풀도록 되어 있다.


일반적인 문법은 큰 문제가 없는데.. LC는 어떻게 할까 생각해보다가 TTS API를 테스트 해본것.


Naver 구현예제가 Golang 은 없는데 일단 구현해보고 문제 입력 -> 자동으로 mp3 생성 후 재생


-> 보기 생성 후 재생 하여 문제 풀기 순으로 구현해봐야겠다.



반응형

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

[Vue.js] vue-material 사용시 event bubbling 문제 해결

Vue에서 ui framework 으로 사용하는 vue-material 에는 작은 버그가 있다.


md-radio 를 포함한 input 모듈에 label 에도 click 이벤트가 걸려있어서 


라벨쪽을 클릭하면 이벤트 버블링이 발생하는 것.


해당 에러를 검색해보니 얼마전 vue-material git hub 에 논의 된 내용이 있었다.


(몇일만 일찍 봤으면 이 이슈는 내것이었을 텐데 ㅂㄷㅂㄷ)


https://github.com/vuematerial/vue-material/pull/954

https://github.com/vuematerial/vue-material/pull/954/commits/1e345ee850100269deec2821bd208633811383d0


이걸 보고 해결하기 위해서는 아직 공식 release 에서는 수정되지 않았으므로 


별도로 vue-material 을 git 으로 내려 받아 


해당 소스에 laebel 쪽에 @click="toggleCheck" => @click.prevent="toggleCheck" 로 수정하고


yarn build 를 해주면 dist 폴더가 삭제 후 다시 빌드된다.


이후 해당 빌드된 폴더를 원래 작업하는 프로젝트 폴더에


node_module/vue-material/dist 폴더를 대체하여 준다.


그리고 프로젝트 에서 확인하여 보면 이벤트 버블링이 발생하지 않는다.


극뽁~!

반응형

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

Nginx, GeoIP, Grok Pattern, InfluxDB, Telegraf, WroldMap, Grafana 연동 삽질기

각 서비스의 접속 지역을 확인하기 위해 Nginx 를 1.13.3 으로 소스 재컴파일을 하였고


GeoIP Module 을 설치하였으며 (이와중에 dependancy 로 설치된 nginx 때문에 소스 컴파일 한


nginx 가 영향을 받아 스크립트가 정상동작 하지 않는 부분이 발생.. 하여 system service daemon 을


수정하여 정상 동작 확보 - bin 파일을 rpm 의 nginx 가 아닌 source build 된 nginx 로 실행 위치 변경)


이후 grafana 에 world map plugin 을 설치하고 지도에 표시하느라 쿼리와 telegraf, influxdb 에 


nginx log 넣느라 삽질 삽질 하다가 어 됬다! 하고 좋아했다. (지난번 포스트)


그런데 몇일 후 보니.. 다시 정상적으로 안나온다 ㅠㅠ What!!!


influxdb 쪽 로그를 보니 사용자 태그로 설정한 geoip_country_code 가 nginx 로그 상에는


아무런 문제가 없지만 inflxudb 로 들어가면 앞에 /"KR/" 형태가 붙는걸 발견..


헐.. 처음엔 안그랬는데?!?!


이걸 해결하려고 nginx log format 을 바꿔보고 telegraf 에서 grok pattern 을 이거저거 수정해보았는데


원인은 일반적인 fields 는 " " 안의 값만 input 으로 받는데 tag로 설정한 값은 " " 값도 같이 


인식해서 db에 넣는다. 덕분에 /" /" 가 같이 붙는것..


그래서 nginx log format 에서 tag 로 사용할 $geoip_country_code 는 " " 를 빼고 그냥 사용해주고


telegraf에서 %{type:tag_name:tag} 로 설정해서 테스트 하니 다시 정상적으로 db로 입력이 된다.


이제야 다시 맵에서 정상적으로 확인이 된다...


원인을 찾아봐야겠는데.. 


https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns


여길 참고하면 기본 tag로 지정되는 verb 값은 "" 안에 있지만 정규식으로 추출해서 쓰는 문법으로 추정된다.


으음 아직 내공이 부족하다 ㅠㅠ



반응형

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

Nginx, GeoIP, Telegraf, Influxdb, Grafana 연동!

회사에서 사용하고 있는 웹 서비스의 구성은 간단하게 다음과 같다.


Nginx (리버스 프록시 서버) --- WAS (각 어플리케이션 서버) --- 백엔드 (DB, 스토리지 등)


여기서 유저는 가장 상단의 Nginx 서버에만 접근이 가능하다. 이러한 구성은 


기본적으로 보안이나 관리 등에 용이하다.


그리고 각 서버들의 상태 모니터링 및 로그 수집을 위해 2가지 시스템을 혼용하여 사용하는데


ELK 와 TICK 이 바로 그것이다.


ELK는 Elasticsearch, Logstash, Kibana 를 지칭하는데 과거 버전에서 5.x 버전으로 


업그레이드를 하면서 이 로그 수집방식이 Logstash-forward 대신에 beat 로 대체 되었다.


그래서 각 단말에 beat가 서버의 로그를 수집하여 Elasticsearch 로 보내고 저장되며 Kibana를 통해


모니터링 및 대시보드를 통한 Visualize 가 가능하다.


Elasticsearch 와 Kibana 는 Docker와 Docker-composer 를 통해 관리된다. 


TICK 은 Telegraf, Influxdb, Chronograf, Kapacitor를 의미하며 각각 수집, 시계열DB, 모니터링 및 관리, 알람


의 기능을 가지고 있다.


그리고 이 데이터들은 Grafana 라는 Visualize platform 에서 활용이 가능하다.


이번에 한 작업은 다음의 목적을 가지고 진행되었다.


1. 특정 사이트의 접속 로그에 대한 모니터링이 필요

2. 접속 지역에 대한 확인이 가능할 것.

3. Nginx access log 에는 기본 apache log + agent, response time 이 붙은 custom log 이며 접속자의 IP가

   확인이 된다. 이 IP를 IP조회 사이트에서 조회하여 지역이 확인이 가능하나 불편하다.

4. Dashboard 를 통해 바로 확인할 방법이 필요.


그래서 위의 목적을 달성하기 위해 다음과 같은 작업을 진행 하였다.


1. 기존 리버스 프록시 서버인 Nginx 서버에 GeoIP Module 연동

  1.1. nginx-module-geoip 를 설치

  1.2. 설정 파일에 load module 후 테스트 -> 로드 X (버전 문제 nginx geoip version 1013003 

        instead of 1013000, 즉 현재 nginx 는 1.13.0 버전 이고 모듈은 1.13.3 버전

  1.2. 기존 사용하던 1.13.0 버전을 1.13.3 버전으로 재컴파일 (rpm, yum 버전 등 build 버전은 사용하지 않음

        http2 지원등을 위해 직접 소스 컴파일, 라이브 서버에 적용 전 VM에 테스트 후 진행)

  1.3. 1.13.3 버전 설치 후 모듈 연동 테스트 -> 성공

  1.4. access log 형식에 geoip_city, geoip_region, geoip_country_code, geoip_country_code2 추가 후 확인 완료


2. Telegraf 수집 형식 변경

  2.1. 기존 logparse 에 grok matching 을 위해 필드 추가 적용 (country_code 는 2개 추가한 이유가 하나는 tag로

       지정하기 위함.)

  2.2. influxdb 에서 수집된 field, tag 에 반영 확인


3. Grafana 연동

  3.1. Grafana World Map Plugin 설치

  3.2. https://github.com/grafana/worldmap-panelhttps://github.com/grafana/worldmap-panel/issues/30

       참고하여 설정 진행

  3.3. World-Map 연동 확인




총평. 진행된 내용만 간략히 적었지만 사실 각 작업간에 많은 시행착오가 있었다. 물논 그런 시행착오가 없을 순

       없다. 각 작업 내용은 다시 한번 정리해서 추후 포스팅 해야겠다.

반응형

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

[Slack] Slack-Bot 으로 웹 서비스 모니터링 하기

회사에서는 다양한 방식으로 모니터링을 하고 있다. 


일단 기본적으로 Nagios로 전반적인 서비스와 하드웨어 등을 모니터링 하고 있고


외부 모니터링 도구로 whatap.io 로 서버와 중요 url 5개(무료 제한) 를 모니터링 하고 있다.


각 서버 로그는 telegraf - influxdb - grafana / filebeat - elastic - kibana 로 이중화 하여


수집 및 모니터링을 하고 있다.


그럼에도 불구하고 안정적인 서비스를 위한 모니터링에는 끝이 없다.


그래서 이번에 Slack-Bot 을 활용하여 웹 서비스를 간편하게 체크할 수 있도록 해보았다.


먼저 개발은 다음과 같은 환경으로 진행하였다.


1. 웹 서비스 40개의 status code 와 응답시간을 체크 -> Golang 으로 개발


2. Node.js 로 Slack-Bot 개발 및 세팅


3. Slack 에서 정해진 키워드를 받으면 Bot 에서 1번에서 개발한 프로그램을 실행하여 결과를 

   메신져로 전송


아래는 결과물이다.



먼저 1번 항목의 경우 Golang 으로 작성한 이유는 Golang을 써보고 싶었고...


Golang에서 지원하는 고루틴이 매우 좋은 성능을 나타내기 때문이다. 


모바일 Slack App 에서도 동일하게 동작함을 확인하였고, 이로써 모니터링 도구가 하나더 추가되었다.


(모..모니터링 지옥이라능!)


수, 목, 금 3일동안 프로토타입은 나왔으니 앞으로 좀 가다듬으서 더 쓸만한 Bot을 만들어봐야겠다.


추신1. 이상 항목 1은 현재 내부에서만 접근가능하게 되어 있어서 나오는 항목으로 실제론 이상이 있지 않습니다?


추신 2. 아래 몇몇 서비스가 3초 이상으로 시간이 많이 걸리는데 올해 정리할 예정..

          (X키를 눌러 조의를 표하십시오.)


추신 3. 개발과 Bot 을 윈도우 환경에서 돌렸는데 생각보다 꽤 환경이 쾌적해서 놀랐..

          (Visual Studio Code - Golang - Node.js / VSC 에 각 Plugin 들을 설치하고 사용하니

           해당 프로그램 하나 켜놓고 다 작업하고 터미널도 바로 열리고 아주 맘에 들었습니다~)

반응형

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

[vSphere] vmdk 파일 복구 방법

운영 환경 : vSphere 5.5

장애 이유 : esxi 호스트 리부트 후 disk description 파일인 vmdk 파일이 보이지 않음. 

               때문에 해당 vm을 켤 수 없는 상황 (error 18)


복구 방법 : https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1002511


해당 datastore 에 접속하여 cli로 작업


# ls -l target-flat.vmdk


vmdk size nnnnnnn


# cat target.vmx


scsi0.virtualDev = "type"


# vmkfstools -c nnnnnnn -a type -d thin temp.vmdk


# rm -i temp-flat.vmdk


# mv temp.vmdk target.vmdk


# vi target.vmdk


RW ~ VMFS "temp-flat.vmdk" 해당 라인 수정

RW ~ VMFS "target-flat.vmdk"


이후 부팅 테스트

반응형

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