23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
회사의 업무를 수행 하다보면 효율적인 업무 진행을 위해 다양한 Tool 을 사용하게 됩니다.
하지만 모든 기능을 내장하는 만능 Tool 은 존재하지 않고 효율성 Trade-off 에 따라 Tool 을 선정하여 이용하게 됩니다.
따라서 필연적으로 필요하지만 Tool 이 지원하지 않는 기능 등이 나타나게 됩니다.
현재 운영 중인 솔루션은 1차 관제 모니터링 Tool로, 12대의 서버가 있으며 국내 총 25개의 서비스를 지원하고 있습니다.
솔루션을 운영하다보면 서비스 품질 관리를 위해 내부 지표를 활용해야할 상황이 생기는데요.
해당 지표를 Log Level 에서만 제공하다보니 서비스 운영 업무 부담이 상당하였습니다. (25개 서비스의 Log 를 일일이 확인해야하기 때문이죠..ㅠ)
또한 해당 기능을 솔루션에 구현하기 위해서는 Session Data Parsing, 신규 DB Table 생성, 지표 확인을 위한 Admin Page 추가 구현 등 들어가는 공수가 이만저만이 아니었습니다.
따라서 솔루션의 운영 서버단에 적재되는 Service Log 를 직접 추출하여 전처리한 뒤, 통합관제 솔루션 기반의 Data Platform으로 Pipeline을 연결하여 시각화 대시보드까지 구현하게 되었습니다.
솔루션으로 제공하는 주요 서비스는 관제 대상 시스템의 모니터링을 지원합니다.
서비스 규모는 약 1,350대의 서버를 관제하고 있으며 시스템 그룹에 따라 국내 25개의 서비스를 제공합니다.
또한 효율적인 서버 Resource 활용을 위해 APP 서버 별 2~3개의 서비스를 운영하고 있습니다.
다음으로 APP 서버의 아키텍처에 대해 간단히 설명하도록 하겠습니다. 서비스 별로 디렉토리를 나누어 운영중이며, 신규 기능은 별도의 디렉토리로 구성하였습니다.
따라서 Data Platform 으로 효율적인 Pipeline 연결을 위해 서비스 로그를 통합하여 관리합니다.
SERVICE 1 // 솔루션 운영 SERVICE 1
ㄴ App
ㄴ Log
SERVICE 2 // 솔루션 운영 SERVICE 2
ㄴ App
ㄴ Log
TotalLog // 신규 기능
ㄴ LogExtractor // Log Extractor 산출물
ㄴ LogFilter // Log Filter 산출물
### FIELD/METHOD
LOG_DIR="/home/SERVICE1/log"
function compress() {
cd $1
log_list=`ls | awk '{print $1}'`
for log_file in $log_list
do
gzip $log_file
done
}
function decompress() {
cd $1
log_list=`ls | awk '{print $1}'`
for log_file in $log_list
do
gzip -d $log_file
done
}
### Log Extraction
decompress $LOG_DIR;
grep -r "Service Log Keyword" | awk '{print $1 $2 $3}' >> service1.log;
compress $LOG_DIR;Log Extractor 는 Linux 서버단에서 Shell Script 로 구현하였습니다.
대용량의 로그를 추출하기 위해 별도의 Daemon Process 구현보다 성능이 좋았기 때문입니다. Shell Script 에 작성된 주요 기능은 아래와 같습니다.
서비스 별 Log 경로 지정을 위한 FIELD 선언.
압축 파일로 존재하는 Service Log 추출을 위한 funtion 구현. (compress/decompress)
특정 Keyword 를 활용한 Service Log 추출.
선언된 FIELD/METHOD 를 활용한 Log Parsing Logic 수행.
public class Main {
public static void main(String[] args) throws IOException {
// DIRECTORY FIELD
String home = System.getProperty("user.dir");
String readerPath = home + "/LogParsing";
File[] logFiles = CommonMethod.logFiles(readerPath);
for (File file: logFiles) {
// File Reader
BufferedReader reader = new BufferedReader(new FileReader(file));
HashSet<String> log = new HashSet<String>();
String str;
while ((str = reader.readLine()) != null) {
log.add(str);
}
// File Writer
File serviceLog = CommonMethod.writerFile(file, home);
BufferedWriter writer = new BufferedWriter(new FileWriter(serviceLog));
writer.write("Column\n");
for (String line : log) {
writer.write(line + "\n");
}
writer.close();
}
}
}다음으로 추출된 Log 를 필터링하기 위한 Java 기반의 Log Filter 를 구현했습니다.
Keyword 별로 추출된 로그를 중복 제거하여 통합된 별도의 로그 파일(.txt)로 저장합니다.
따라서 필터링 결과 적재되는 로그 파일들을 Data Platform 에서 수집해가는 Pipeline 이 연결되었습니다.
소스 코드에 작성된 주요 내용은 아래와 같습니다. (코드 간소화를 위해 CommonMethod Class를 별도로 구현하였으나, 따로 설명하지 않겠습니다.)
추출된 로그를 불러오기 위한 DIRECTORY 선언. (/LogParsing 경로는 Extractor 의 로그가, /LogFilter 경로는 Filter 의 로그가 적재됩니다.)
추출된 로그 파일의 필터링을 위해 HashSet 에 저장. (중복 제거)
필터링 된 로그를 적재하기 위한 신규 로그 파일 생성. (CommonMethod.writerFile)
생성된 신규 로그 파일에 필터링 된 로그를 저장하고 파일 종료.
Log Extractor & Log Filter 를 통한 Data Pipeline 구축으로 Data Platform 내에 Data Mart 가 생성되었습니다.
현재 SK 하이닉스에서는 통합 관제 솔루션을 활용(SPLUNK)하여 Data Platform 을 운영하고 있습니다.
서비스 시각화를 위해 솔루션 언어인 SPL(SPLUNK Processing Language)을 활용하여 대시보드를 구현합니다.
SPLUNK 솔루션에 대해 조금 더 설명을 드리면, 통합 Log 모니터링에 특화된 솔루션입니다.
빅데이터 검색에 특화되어 상당히 유용한데요, (10억건의 Data 검색이 5초가 채 걸리지 않습니다..!!),
하지만 License 비용이 비싼편이기 때문에 기업 수준 외에 접할 기회가 많지 않습니다.
최근 기업 수준에서도 오픈소스 기반의 ELK(ElasticSearch, LogStash, Kibana)를 많이 쓴다고 하니, 관심 있으신 분들은 공부해보시는 것도 좋을 것 같습니다.
이번 Tech Blog 는 실제 업무에서 활용된 기술 역량 Case 에 대해 소개해드렸습니다.
최근 다양한 분야에서 Powerful 한 Tool 이 등장하여 업무 효율성을 높여주고 있습니다.
하지만 가끔은 업무의 Self Design 을 통해 Coverage 를 올려야할 경우가 생기기 마련인데요,
이 때 각자가 가진 개발 역량을 활용하여 극복할 수 있다는 점을 전달하고 싶었습니다. 그럼 이것을 끝으로 펜을 놓도록 하겠습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.