This is a Platform that collects all the data accruing in your Application and shows the data in real time by using Kibana or other tools.
There is no garbage data in your Application. It is necessary to identify what data is the most important among the collecting data from your Applcation. Also collect and analysis must be performed in different processes. The illuminati is desinged to make collect all data easily and it can be possible scalability working by separated analysis process.
- Java6 or higher.
- Message queue (RabbitMQ or Kafka)
- Java Application that can use AspectJ
- ElasticSearch
- Kibana
- Spring Cloud Stream - used to create a consumer application
- ApiSampleApplication
- illuminati-client-annotation
- illuminati-client-processor
- illuminati-client-switch
- illuminati-client-elasticsearch
- illuminati-consumer-es-sample
- Applied server information(IP, HOST_NAME...ETC), status of JVM MEMORY.
- All of client request information.
- All of Header and Cookie
- OS, BROWSER, DEVICE information
- Global Transaction ID generation enables application parent method call order and content traceability.
- Execution methods and parameters on the application.
- Method execution time in Application.
- Value of Method request parameter. (GET, POST)
- Result value of the method request on the application.
- Do not need to create a data type. (No DTO required)
- Agent installation is not required.
- Annotation type is easy to apply.
- Add dependency of MAVEN or Gradle (illuminati)
- Add configuration in illuminati-{phase}.yml, properties에 (address of queue... etc)
- When execute application with add -Dspring.profiles.active={phase}
- Add "@Illuminat" Annotation to where you want to collect
- It was developed to have no influence on this logic by using a separate thread and Buffer.
- Drop in performance can occur, but there is no big difference in physical server. (It can happen a little more on virtual machines.)
- Even if an exception occurs in the original application logic, illuminati can also collect the corresponding exception information.
* Maven
<repositories>
<repository>
<id>jcenter</id>
<url>https://jcenter.bintray.com/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.leekyoungil.illuminati</groupId>
<artifactId>illuminati-client-annotation</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.leekyoungil.illuminati</groupId>
<artifactId>illuminati-client-processor</artifactId>
<version>0.9.0</version>
</dependency>
<!-- This is an option. If you add the module, you can turn it on and off without deploying it. -->
<dependency>
<groupId>com.leekyoungil.illuminati</groupId>
<artifactId>illuminati-client-switch</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
* Gradle
repositories {
jcenter()
}
compile 'com.leekyoungil.illuminati:illuminati-client-annotation:1.0.1'
compile 'com.leekyoungil.illuminati:illuminati-client-processor:0.9.0'
// This is an option. If you add the module, you can turn it on and off without deploying it.
compile 'com.leekyoungil.illuminati:illuminati-client-switch:1.0.0'
* apply to all sub methods
@Illuminati
@RestController
@RequestMapping(value = "/api/v1/", produces = MediaType.APPLICATION_JSON_VALUE)
public class ApiSampleController {
@RequestMapping(value = "test1")
public String test1 (String a, Integer b) throws Exception {
String testJson = "{\"test\" : 1}";
return testJson;
}
@RequestMapping(value = "test2")
public String test2 (String a, Integer b) throws Exception {
String testJson = "{\"test\" : 2}";
return testJson;
}
}
* apply to all target method
@RestController
@RequestMapping(value = "/api/v1/", produces = MediaType.APPLICATION_JSON_VALUE)
public class ApiSampleController {
@RequestMapping(value = "test1")
public String test1 (String a, Integer b) throws Exception {
String testJson = "{\"test\" : 1}";
return testJson;
}
@Illuminati
@RequestMapping(value = "test2")
public String test2 (String a, Integer b) throws Exception {
String testJson = "{\"test\" : 2}";
return testJson;
}
}
- Easily add Consumer using Spring Cloud Stream
- Consumer can transfer data. (ElasticSearch, MongoDB, MySQL, Hadoop, etc.)
- Multiple consumers can receive the same Event data.
- It is easy to increase throughput by dividing data from many consumers.
- Sample of Commerce Data.
===============================================================================
쓰레기 데이터란 없습니다. Application에서 발생하는 모든데이터를 수집하고 그중에 어떤 데이터가 의미가 있는 데이터 인지는 쌓이는 데이터들은 확인해서 구분해야 합니다. 그리고 데이터 수집과 분석은 서로 다른 프로세스에서 실행 되어야 합니다. illuminati는 Application에서 발생하는 모든 데이터를 사용자의 필요성에 따라서 수집을 쉽게 할수 있고 그 수집된 데이터의 분석을 처리하는 프로세스를 분리하여 확장이 가능하고 좀더 빠르게 데이터를 분석할수 있도록 하기위해 만들어졌습니다.
- Java6 이상
- RabbitMQ 또는 Kafka
- AspectJ를 사용할 수 있는 Java Application
- ElasticSearch
- Kibana
- Spring Cloud Stream - Consumer 제작시
- ApiSampleApplication
- illuminati-client-annotation
- illuminati-client-processor
- illuminati-client-switch
- illuminati-client-elasticsearch
- illuminati-consumer-es-sample
- 적용 서버의 정보와(IP, HOST_NAME..등등), JVM MEMORY 사용정보
- 클라이언트 요청에 관한 모든 정보
- 모든 HEADER, COOKIE
- OS, BROWSER, DEVICE 정보
- Global Transaction ID발급으로 Applicaion상의 메서드 호출 순서,내용 추적가능
- Application상의 실행 메서드 및 파라메터
- Application상의 메서드 실행 시간
- Application상의 메서드 요청의 파라메터값 (GET, POST)
- Application상의 메서드 요청의 결과값
- 따로 데이터 타입을 만들 필요가 없습니다. (DTO가 필요 없음)
- Agent설치가 필요 없습니다.
- Annotation방식으로 간편한 적용이 가능합니다.
- MAVEN, GRADLE Dependency 추가
- illuminati-{phase}.yml, properties에 설정 추가 (queue주소... 등등)
- Application 실행시 -Dspring.profiles.active={phase} 추가
- 수집을 원하는 곳에 @Illuminati Annotation을 추가
- Buffer와 별도의 Thread를 사용하여 본 로직에 영향이 없도록 개발되었습니다.
- 성능하락은 발생할수도 있지만 물리서버에서는 큰 차이는 없습니다. (가상 장비에서는 조금더 발생할수 있습니다.)
- 본래의 Application로직에서 Exception이 발생하는 경우에도 illuminati에서는 해당 Exception정보도 수집하여 파악이 가능합니다.
* Maven
<repositories>
<repository>
<id>jcenter</id>
<url>https://jcenter.bintray.com/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.leekyoungil.illuminati</groupId>
<artifactId>illuminati-client-annotation</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.leekyoungil.illuminati</groupId>
<artifactId>illuminati-client-processor</artifactId>
<version>0.9.0</version>
</dependency>
<!-- 이것은 옵션 입니다. 해당 모듈을 추가하면 대시 배포 없이 on, off할수 있습니다. -->
<dependency>
<groupId>com.leekyoungil.illuminati</groupId>
<artifactId>illuminati-client-switch</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
* Gradle
repositories {
jcenter()
}
compile 'com.leekyoungil.illuminati:illuminati-client-annotation:1.0.1'
compile 'com.leekyoungil.illuminati:illuminati-client-processor:0.9.0'
//이것은 옵션 입니다. 해당 모듈을 추가하면 대시 배포 없이 on, off할수 있습니다.
compile 'com.leekyoungil.illuminati:illuminati-client-processor:1.0.0'
* 하위 모든 Method에 적용
@Illuminati
@RestController
@RequestMapping(value = "/api/v1/", produces = MediaType.APPLICATION_JSON_VALUE)
public class ApiSampleController {
@RequestMapping(value = "test1")
public String test1 (String a, Integer b) throws Exception {
String testJson = "{\"test\" : 1}";
return testJson;
}
@RequestMapping(value = "test2")
public String test2 (String a, Integer b) throws Exception {
String testJson = "{\"test\" : 2}";
return testJson;
}
}
* 해당 Method에 적용
@RestController
@RequestMapping(value = "/api/v1/", produces = MediaType.APPLICATION_JSON_VALUE)
public class ApiSampleController {
@RequestMapping(value = "test1")
public String test1 (String a, Integer b) throws Exception {
String testJson = "{\"test\" : 1}";
return testJson;
}
@Illuminati
@RequestMapping(value = "test2")
public String test2 (String a, Integer b) throws Exception {
String testJson = "{\"test\" : 2}";
return testJson;
}
}
- Spring Cloud Stream을 이용하여 쉽게 Consumer를 추가할수 있음
- Consumer에서 ElasticSearch나 MongoDB, MySQL, Hadoop등 원하는대로 데이터를 전송가능 (Sample은 ES만완성)
- 여러 컨슈머에서 동시에 같은 Event 데이터를 받을수 있음
- 여러 컨슈머에서 데이터를 나누어 받아 Throughput을 쉽게 늘릴수 있음
- 커머스 데이타 Sample 화면
illuminati is distributed under the Apache Software License version 2.0.