Rafael's blog

Make simple

Kibana 3 Dashboard Default 설정하기

아래 설명은 kibana3 + elasticsearch + logstash 로 설정이 완료됨을 가정한다.

このチュートリアルであなたが Elixir を始められるようにしようと思います.この章では Elixir がインストールされていることの確認と,IEx と呼ばれる Elixir のインタラクティブシェルをうまく動かせることに焦点を当てています.

kibana3 메인 페이지를 들어가면 단순히 소개 페이지가 나온다.

소개페이지를 dashboard로 사용하고자 하지는 않을것이다.

그래서 logstash 에서 전달된 로그를 보려고 해당 dashboard를 설정하여 저장했을것이다.

저장은 우측상단의 디스크 버튼을 누른후 dashboard 이름을 정하면 된다.

설정된 dashboard로 바로 가려면 아래와 같은 주소로 접근을 해야 할것이다.

http://log.dashboard.com/#/dashboard/elasticsearch/Service Log DashBoard

원하는건 http://log.dashboard.com 으로 접속하면 위 주소로 바로 이동하게 하는것이다.

index.html 에 meta refresh 태그를 사용도 해봤지만 index.html 파일은 계속 사용되기 때문에 무한 반복이 발생하였다.

먼저 내가 설정한 dashboard json 파일을 가져와야 한다.

방법은 chrome 브라우저에서 rest client 플러그인을 설치 후 아래 주소를 입력한다.

elasticsearch.server.host 는 본인의 주소로 변경하시길…

http://elasticsearch.server.host:9200/kibana-int/dashboard/Service%20Log%20DashBoard

아래와 같은 응답이 왔을것이다.

json 응답에서 source 밑에 dashboard 데이터를 복사하자.(주의! 쌍따옴표는 빼자)

이를 다시 이쁜 json 으로 변경하기 위해 jsbeautify 에 붙여넣기 한다.

이를 다시 복사하여 kibana3 가 설치된 경로에서 /app/dashboards/default.json 에 덮어쓰면 끝이다.

JsonIgnore Does Not Work!!!

어느날 갑자기 Spring mvc(v3.2.2)로 구현해놓은 REST API JSON 응답값에 null 값을 가지고 있는 필드가 포함이 되는 문제가 생겼다.

분명히 도메인 객체에 @JsonSerialize(include = Inclusion.NON_NULL) 이 설정되어있고 잘 동작하던 코드였다.

한참동안 디버깅을 해보다가 도저히 원인을 찾을수가 없어 결국 내가 커밋했던 부분들을 하나씩 롤백해보았다.(다행히 프로젝트는 초기상태였고 활발하게 개발중이 아니였다)

어이없게도 aws 를 사용하기 위해 추가 했던 aws-java-sdk 1.5.6 가 문제였다.

릴리즈 노트 : http://aws.amazon.com/releasenotes/Java/7728064532185471

1
2
3
4
5
6
    <!-- aws java sdk -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.5.6</version>
    </dependency>

원인은 aws-java-sdk 1.5.6 버전부터 jackson 라이브러리를 2.1.2 버전을 사용한다.

프로젝트에서 이미 사용중인 jackson 라이브러리는 1.9.6 이였다.

소스에는 1.5.7 로 되어있으나 maven 라이브러리 aws-java-sdk 1.5.62.1.2 버전을 사용한다.

https://github.com/aws/aws-sdk-java/commit/6d88d2ed9c5ed80619a3397fd484fdc1f8a221de#diff-600376dffeb79835ede4a0b285078036R26

하지만 아무리 릴리즈 노트를 찾아봐도 이에 대한 설명은 없다.

당장 해결책은 aws-java-sdk 1.5.5 를 사용하도록 하였으나 추후에 aws-java-sdk 를 업데이트 해야할 경우에 문제가 될 수도 있다.

아무래도 jackson 2.1.2 라이브러리가 프로젝트에 포함되면서 기존 1.9.6 버전을 무력화 시켜버리는것 같다.

참고로 jackson 2.1.2 버전은 패키지명이 com.fasterxml 로 시작하고 1.9.6 버전은 org.codehaus 로 시작한다.

Intellj 좋은점을 찾아보자

  1. 반응 속도가 빠르다.
  2. 메모리를 적게 먹는다.
  3. 처음 설치시 VCS(SVN, GIT등), EDITOR, WS(톰캣, Jetty등) 서버 모든 플러그인을 선택해서 설치할 수있다. 이클립스 였다면 마켓 뒤져가면서 설치해야 한다.
  4. Tools 메뉴에 Rest Client, SoapUI 가 있다.
  5. Tomcat catalina, localhost 로그를 탭에서 바로 볼 수 있다.

updated 2013.09.25

  1. debugging 시에 변수가 타입별로 색깔이 달라서 눈에 띄게 구분이 가능하다.
  2. web app 실행중에 변경된 클래스는 lazy 하게 reload(즉, 실제 브라우저에서 요청하면 그때 변경된 클래스를 reload)
  3. Spring 지원이 STS 툴보다 낫다.
    1. @Autowired 된 클래스를 자동으로 추적해준다.
    2. 자바 클래스가 어느곳의 xml 정의에 의해 spring context 에 생성됐는지 추적해준다.
    3. Propeties 파일에 사용되지 않는 정의들을 알려준다.
  4. bundle 플러그인들이 깔끔하게 동작한다.
  5. 소스를 수정하면 내가 이전에는 어떻게 생긴 코드를 바꿨는지 기억하기 어려워서 보통 최신 Repository 와 비교하는데 IDE자체에서 알아서 해당 라인에 어떤 코드가 있었는지 보여준다.(자바개발시에 이클립스만 쓰던 나에게는 충격이였음)
  6. Git 을 쓰고 싶지만 팀 사정상 SVN을 사용하고 있는데 이클립스 SVN 플러그인 보다 모든 부분(commit, diff, resolve conflict 등)에서 뛰어나다.

지극히 개인적으로 적었지만 IntelliJ는 정말 훌륭한 IDE 이다.

세세한 기능들에 장인정신(?)이 깃들어 있다는걸 알 수 있다.

물론 이클립스도 좋은 플러그인을 설치한다면 IntelliJ와 동일한 효과를 나타낼 수도 있겠으나 난 그렇게 하고 싶진않다.

웬만한 자바 개발자 또는 Spring 개발자라면 IntelliJ 강추다!!!

나같은 경우는 SNS나 블로그같은데서 좋다고는 하는데 쉽게 와닿지 않아서

일단 한달짜리 평가버전을 사용해보면서 위와 같은 장점들을 나열해놓았지만 글만으로는 실제 알기 어려우므로 평가 버전을 설치하여 본인 프로젝트를 로딩하여 사용해 보라고 추천하고 싶다.

아마 그동안 이클립스 base 툴만 사용했던 개발자들은 깜짝 놀랄것이다.

Eclipse 에서 Maven 으로 Java 와 Scala 같이 쓰기

먼저 이클립스에 scala ide 를 설치한다.

이클립스에 scala ide 설치하기

eclipse 에서 help->eclipse market place 선택->“scala”로 검색->The Scala IDE for Eclipse 의 Install 버튼 클릭->Next->I accept~ 체크->Finish->설치완료 후 eclipse 재시작

Install m2eclipse-scala

Help->Install new software-> work with 에 http://alchim31.free.fr/m2e-scala/update-site 입력 후 엔터->설치-> eclipse 재시작

(참고:http://scala-ide.org/docs/tutorials/m2eclipse/index.html)

환경설정

eclipse 에서 Window->Preferences->Scala->Compiler 에서 target 을 java 에서 사용하는 jvm 버전과 동일하게 설정. 예) jvm-1.7

pom.xml 에 추가

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<properties>
  <java.version>1.7</java.version>
  <scala-version>2.10.2</scala-version>
</properties>        
<dependencies>
  <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <scope>compile</scope>
      <version>${scala-version}</version>
  </dependency>
</dependencies>
<build>
  <pluginManagement>
      <plugins>
          <plugin>
              <groupId>net.alchim31.maven</groupId>
              <artifactId>scala-maven-plugin</artifactId>
              <version>3.1.6</version>
          </plugin>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>2.5.1</version>
          </plugin>
      </plugins>
  </pluginManagement>
  <plugins>
      <plugin>
          <groupId>net.alchim31.maven</groupId>
          <artifactId>scala-maven-plugin</artifactId>
          <executions>
              <execution>
                  <id>scala-compile-first</id>
                  <phase>process-resources</phase>
                  <goals>
                      <goal>add-source</goal>
                      <goal>compile</goal>
                  </goals>
              </execution>
              <execution>
                  <id>scala-test-compile</id>
                  <phase>process-test-resources</phase>
                  <goals>
                      <goal>testCompile</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
              <source>${java.version}</source>
              <target>${java.version}</target>
              <compilerArgument>-Xlint:all</compilerArgument>
              <showWarnings>true</showWarnings>
              <showDeprecation>true</showDeprecation>
          </configuration>
          
          <executions>
              <execution>
                  <phase>compile</phase>
                  <goals>
                      <goal>compile</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>
     </plugins>

에러메시지 조치사항

pom.xml 에서 아래 에러 메시지 발생시

plugin execution not covered by lifecycle configuration net.alchim31

m2eclipse-scala 가 정상적으로 설치 되어있는지 확인한다.

(참고: http://stackoverflow.com/questions/13995236/avoid-eclipse-ignore-garbage-in-scala-maven-project)

updated 2013.10.4

Package Explorer 에서 Scala Library 가 포함되어 있지 않다면 Maven 에서 update project 를 한번 해준다.

프록시(proxy)에 관한 모든것

ssh via socks proxies

proxy 환경에서 github에 push 가 안될경우

~/.ssh/config 파일에 아래 설정 파일을 생성해 준다.

Host github.com
    HostName github.com
    ProxyCommand=nc -x localhost:8081 %h %p