- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
big data (빅데이터) Flume 메트릭 커스텀 리포터 구현
2016.06.05 19:37
Flume 메트릭 커스텀 리포터 구현
Flume에 대한 커스텀 메트릭을 구현할 일이 생겨 그 내용을 정리한다.
구조
Flume의 메트릭을 가져와 처리하려면 Flume이 제공하는 MonitorService 인터페이스를 상속받아 구현하면 된다.

MonitorService 구현하기
MonitorService를 상속받은 클래스는 다음과 같이 세 개의 메서드만 알맞게 구현하면 된다.
- configure() : 초기화한다.
- start() : 메트릭을 처리하는 작업을 별도 쓰레드로 시작한다.
- stop() : 메트릭 처리 작업을 중지한다.
MetricReporter 구현
MetricReporter는 ExecutorService를 이용해서 실행할 것이므로 Runnable을 구현한다. run() 메서드에서 메트릭을 읽어와 알맞은 처리를 하면 된다. 다음은 간단한 구현 예제이다.
import org.apache.flume.instrumentation.util.JMXPollUtil;
public class MetricReporter implements Runnable {
private final String hosts;
public FlumemonReporter(String hosts) {
this.hosts = hosts;
}
@Override
public void run() {
try {
List<String> metrics = new ArrayList<>();
Map<String, Map<String, String>> metricsMap = JMXPollUtil.getAllMBeans();
for (String component : metricsMap.keySet()) {
Map<String, String> attributeMap = metricsMap.get(component);
if (component.startsWith("CHANNEL.")) {
String name = "EventPutAttemptCount";
String value = attributeMap.get(name);
metrics.add(component + ", " + name + "=" + value);
}
}
metrics.forEach(System.out::println);
} catch (Exception e) {
}
}
}
JMXPollUtil.getAllMBeans()를 사용하면 flume이 제공하는 메트릭을 Map 형태로 구할 수 있다. 이 Map의 키는 컴포넌트 이름에 해당하는데, flume의 SOURCE, CHANNEL, SINK가 컴포넌트가 된다. 컴포넌트 이름은 "타입.이름"의 형태를 취한다.
metricsMap.get()은 개별 컴포넌트의 메트릭 목록을 맵 형태로 다시 구한다. 각 컴포넌트별로 제공하는 메트릭 목록이 다르다. 예를 들어, 채널의 경우 "EventPutAttemptCount", "EventPutSuccessCount"와 같은 메트릭을 제공한다. 각 메트릭 값은 String 타입으로 읽어오기 때문에, 필요시 Long이나 Integer와 같은 타입으로 알맞게 변환해주어야 한다.
Flume 실행시 MonitorService 지정하기
MonitorService를 구현했다면, 이제 남은 작업은 Flume을 실행할 때 구현한 클래스를 MonitorService로 사용하도록 지정하는 것이다. 다음과 같이 flume.monitoring.type 시스템 프로퍼터에 구현 클래스를 지정하면 된다.
bin/flume-ng agent --conf-file example.conf --name a1 \
-Dflume.monitoring.type=com.mycomp.MetricReporter -Dflume.monitoring.hosts=somehost
이 외에 구현 클래스에서 필요로 하는 시스템 프로퍼티를 -D 옵션으로 추가 지정한다. 물론, 구현한 클래스가 flume이 사용하는 클래스패스에 위치해야 한다.
[출처] http://javacan.tistory.com/entry/Flume-Metric-Custom-Reporter
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86335 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78797 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95543 |
| 1 |
Programatically retrieving data from a website into a database
| 졸리운_곰 | 2017.05.30 | 9225 |

