23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요. 이번 포스팅은 오픈 소스를 활용한 SRE 환경 구축에 대해 공유하려합니다.
목적 및 배경은 현재 운영중인 시스템의 내부 Metric & Monitoring 환경이 열악하여 실시간 Monitoring 환경 구축을 위해 시작했습니다.
활용한 오픈 소스는 ELK Stack 을 활용했으며, Data Pipeline 구축과 Kibana 시각화 위주로 개발 진행했습니다.
ELK Stack의 Repository 및 시각화 대시보드의 활용을 위해서는 Elasticsearch 및 Kibana 구축이 필요합니다.
하지만, 감사하게도 하이닉스 내부에 구축된 Cloud Platform을 이용하여 Elasticsearch 및 Kibana 서비스를 활용하였습니다.
SK hynix의 Private Cloud 구축 관련해서는 아래 기사 참고 부탁드립니다. (뒷광고 아님 !!)
[ITWORLD] SK하이닉스, VM웨어 기반 SDDC 도입해 ‘프라이빗 클라우드’ 구현
SRE(Site Reliability Engineering) 란 사이트 신뢰성 엔지니어링으로 불리며, S/W 기반의 IT 운영과 자동화를 통해 효율화를 추구하는 분야입니다.
기존의 DevOps 철학은 개발/운영을 통합한 IT 생태계 구축을 목표로 하는데요, 시스템 기능 구현에 목적을 둔 개발 업무와 시스템 안정성에 목적을 둔 운영 업무의 사일로(분단)를 최소화 하기 위한 개발방법론입니다.
하지만 이를 어떻게 실현할 수 있을까? 에 대해 제시된 여러가지 방법론 중, 현재로서 구글의 SRE 환경 도입이 대표적인 성공 사례로 꼽히고 있습니다.
또한 Google SRE 공식 사이트에서는 SRE에 대해 아래와 같이 설명하고 있습니다.
"SRE is what you get when you treat operations as if it’s a software problem.
Our mission is to protect, provide for, and progress the software and systems behind all of Google’s public services
— Google Search, Ads, Gmail, Android, YouTube, and App Engine, to name just a few —
with an ever-watchful eye on their availability, latency, performance, and capacity."
앞서 말씀드린 것처럼 Repository 및 시각화는 사내 Cloud Platform에서 제공하는 EK Service를 사용하였습니다.
따라서 해당 버전과 호환되는 Logstash Agent를 각 APP 서버에 설치하였고, Pipeline 수집 대상은 서비스 로그(.log) 파일입니다.
(사내 보안 상 Network를 통한 Logstash 설치가 불가하여 매뉴얼로 설치 진행했습니다. ELK Stack은 버전 별 호환이 안되는 경우가 많아서 호환성 확인을 꼭 해주셔야 합니다.)
수집 대상 Data는 Logging 라이브러리 형식(ex. log4j)으로 적재되는 로그 파일이기 때문에 전처리 과정이 복잡했습니다.
먼저 Logging 라이브러리 형식을 파싱하여 message 필드 부분을 추출해야하며, 추출된 message 필드에서 필요 데이터와 가비지 데이터의 전처리 과정이 추가로 필요합니다.
따라서 서비스 로그를 파싱하는 Filter를 Logstash에 적용 후, 별도 Ingest Pipeline 을 통해 데이터 추출하도록 Architecture를 설계하였습니다.
* Pipeline 설계의 경우 경량화 된 Filebeat 를 이용하는 것이 서버 Resource 안정성에 효율적입니다.
하지만 데이터 전처리 과정이 복잡하다는 점과 별도의 Logstash 운영 서버 지원이 어렵다는 점을 감안하여, Logstash를 이용하기로 의사 결정하였습니다.
(추후 별도의 Logstash 운영 서버 지원이 가능할 경우, Filebeat로 Pipeline을 고도화하여 통합 환경을 만들수도 있을 것 같습니다.)
[2023-07-21 10:01:00][INFO][a.b.c.ServiceInfo] [LOG INFO] Service 1 Information Log (Time)
[2023-07-21 10:01:10][INFO][a.b.c.ServiceInfo] [LOG INFO] Service 1 Information Log (Service)
[2023-07-21 10:01:20][INFO][a.b.c.ServiceInfo] [LOG INFO] Service 1 Information Log (Status)
[2023-07-21 10:02:00][INFO][a.b.c.HostInfo] [HOST INFO] host=127.0.0.1 key=test / value=log
[2023-07-21 10:03:10][WARN][a.b.c.ServiceLogger] [LOG INFO] Garbage Log 1
[2023-07-21 10:03:20][WARN][a.b.c.ServiceLogger] [LOG INFO] Garbage Log 2
[2023-07-21 10:04:00][ERROR][a.b.c.ExceptionHandler] [ELAPSED] Service Hang Occurred. (HostInfo)
[2023-07-21 10:05:00][INFO][a.b.c.AOP] [ELAPSED] Method Elapsed Time = 11000ms # → Metric 추출 대상 LogLogstash에서 지원하는 input 형식에는 많은 것들이 있지만, 서비스 로그 파일 수집을 위해 file로 설정했고, type 속성으로 서비스를 구분하였습니다.
또한 TEST Log의 Logging 라이브러리 형식을 파싱하여 log-message를 추출하기 위해 filter 에는 grok 메소드를 사용하였습니다.
Logstash 에서는 수집된 Raw Data를 message 라는 필드에 저장합니다. 이를 grok 메소드를 통해 필드를 추출하게 되고, 추출 결과를 Kibana 에서 확인할 수 있습니다.
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
file {
path => "~/test/log/service1.log"
type => "service1-log"
}
}
filter {
grok {
match => { "message" => "\[%{TIMESTAMP_ISO8601:date}\]\[%{LOGLEVEL:log-level}\]\[%{DATA:imx-class}\] \[%{DATA:log-type}\] %{GREEDYDATA:log-message}" }
}
}
output {
elasticsearch {
hosts => ["EK_SERVICE_IP:PORT"]
index => "test-service1"
pipeline => "pipeline_test" # → 2-2) Ingest Node Pipeline 에서 사용
user => "user"
password => "password"
}
}데이터 전처리를 통해 log-message를 추출했지만, 필요 Log를 추출하고 Garbage Data를 제거하기 위해 전처리가 한번 더 필요합니다.
이에 Elasticsearch 에서 제공하는 Ingest Node Pipelines 기능을 사용하여 내부 Pipeline을 생성했습니다.
앞서 logstash.conf - output 에 설정한대로 'pipeline_test' 로 생성한 후, 필드 추출을 위해 Grok 메소드를 추가하였습니다.
또한 log-message 필드 추출 중에 숫자형 데이터는 향후 Kibana 에서 시각화를 위해 int type을 주어 추출했습니다.
따라서, Ingest Node Pipeline 설정 이후 필요 데이터인 'elapsed-time' 필드가 int type으로 추출됨을 확인할 수 있습니다.
이를 통해 서비스 지연 시간을 추출하였으며, 이를 실시간으로 모니터링 할 수 있는 환경이 만들어졌습니다.
이로써 실시간 Data Pipeline 구축이 완료되었고, Elasticsearch Repository 로 정상적인 데이터 적재가 이뤄지고 있습니다.
다음 시간에는 해당 데이터를 활용한 Metric & Monitoring 환경 구축으로 Kibana Visualize 및 Dashboard 구현으로 돌아오도록 하겠습니다. 감사합니다 :)
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.