2016년 7월 12일 화요일

VisualVM jstatd

./rmiregistry 1099

./jstatd -p 1099  -J-Djava.security.policy=tools.policy -J-Djava.rmi.server.hostname=10.10.0.0

2016년 7월 11일 월요일

elasticsearch search query


GET _search
{
  
  "query": {
    "bool": {
      "must" : [
        { 
          "exists": { 
            "field": "exception.exception_class" 
          }
        },
        
        {
          "match": {
            "level": {
              "query" : "INFO"
            }
          }
        },
               
        {
          "range": {
            "@timestamp" : {
              "gte" : "now-1h",
              "lte" : "now",
              "time_zone": "+09:00"
            }
          }
        }
        
        
      ]
    }
  }
}

2016년 7월 6일 수요일

logstash output index naming daily

기존의 log4j 로그를 logstash를 이용하여 elasticsearch에 Indexing 하는 작업을 진행 하던 중 Index를 일별로 나누어서 관리를 하기 위해서 log-YYYY-MM-dd 형식으로 쌓기로 결정을 하게 되었음.

우선 아래의 depandency를 추가하여 기존 log4j 로그를 json형식으로 쌓이도록 하였음.

 net.logstash.log4j
 jsonevent-layout
 1.7

json형식으로 쌓인 로그를 아래와 같이 설정을 하였음

input {
  file {
    path => "/*"
    start_position => "beginning"
    type => "log4j-json"
    codec => json
  }
}

output {
  elasticsearch {
    index => "log-%{+YYYY-MM-dd}"
  }
}

위와 같이 설정을 하게 될 경우 logstash에서 output되는 current_time이 인덱스 명으로 사용이 되어 일 별 인덱스 생성이 가능하였다.

만약 실시간으로 로그를 전송하는 경우가 아니라 주기적으로 로그를 전송하게 된다면 index명에 들어가는 일자가 맞는 것일까?
로그가 실제로 쌓인 시간을 인덱스 날짜로 사용을 할 필요가 생겨 구글링을 통하여 아래와 같이 설정을 하였음

input {
  file {
    path => "/*"
    start_position => "beginning"
    type => "log4j-json"
    codec => json
  }
}

filter {
  ruby {
    code => "event['index_day'] = Time.at(event['@timestamp'].to_i).strftime('%Y-%m-%d')"
  }
}

output {
  elasticsearch {
    index => "log-%{index_day}"
  }
}

필터를 통하여 index_day라는 키에 @timestamp 값을 원하는 포맷으로 변경 한 값을 주어 index명에서 사용을 함으로서

로그에 있는 시간을 기준으로 index 설정이 가능해졌다.


====== 추가 ======

@timestame의 경우 한국 시간으로 표시 되지 않고 09:00 시간을 뺀 시간을 알려주고 있어 index명에서 한국 기준이 아닌 경우가 있어 아래와 같이 수정하여 해결함

code => "event['index_day'] = Time.at(event['@timestamp'].to_i).localtime.strftime('%Y-%m-%d')"


2016년 6월 27일 월요일

spring 4.x + jackson json response

Spring버전을 3.x 에서 4.x로 버전을 올리면서 발생 한 이슈 가운데 한가지로
@ResponseBody를 이용하여 rest api 결과를 돌려주고 있었는데
JSON으로 잘 뽑히던 부분이 XML로  뽑히는 현상이 발생하여
구글링하여 아래와 같이 수정하였음



  com.fasterxml.jackson.core
  jackson-core
  2.7.3



  com.fasterxml.jackson.core
  jackson-databind
  2.7.3


pom.xml에 위의 라이브러리를 추가하고 기존의 jackson 라이브러리를 제거하였음

  
    
      
        
          text/html;charset=UTF-8
          application/json;charset=UTF-8
        
      
      
    
  


spring-mvc에 위의 annotation-driven을 추가하여 해결하였음

2016년 6월 23일 목요일

Redis 런타임 시 Replication (Master/Slave) 변경

Redis 운영 중 하드웨어 작업으로 인해 Master / Slave 를 변경 해야하는 이슈가 발생하여 아래와 같이 처리하였음

requirepassword 는 설정하지 않아 패스워드 없이 진행하였음

- 구성 -
S1 : Master
S2 : Slave

1. S1 부터 작업을 하게 되어 S2 를 Master로 변경하였음

# redis-cli slaveof no one


2. S1 작업 완료 후 S1을 S2의 Slave로 변경

# redis-cli slaveof xxx.xxx.xxx.xxx(s2) 6379
# redis-cli config set repl-ping-slave-period 10
# redis-cli config set repl-timeout 60

3. info로 확인하면서 동기화가 다되었을 경우 S1을 다시 Master로 변경하였음

# redis-cli slaveof no one

4. S2 작업 완료 후 S2를 S1의 Slave로 변경

# redis-cli slaveof xxx.xxx.xxx.xxx(s1) 6379
# redis-cli config set repl-ping-slave-period 10
# redis-cli config set repl-timeout 60

5. info로 확인하면서 동기화가 잘되는지 확인하고 종료 하였음

처음 해보는 작업이라 인터넷으로 검색 후 진행하였음

2016년 6월 22일 수요일

linux 디렉토리 용량 확인 du

1. 지정한 디렉토리에 존재하는 모든 파일의 용량을 표시
# du /etc

2. 지정한 디렉토리에 존재하는 모든 파일을 포함 한 용량을 표시
# du -s /etc

3. 2번의 결과에 읽기 쉽게 용량 단위를 붙여서 표시 (human-readable : 여기저기 많이 쓰임)
# du -sh /etc

2016년 6월 17일 금요일

[CSS] number input arrow hide

number 타입 input의 상하 화살표를 숨기는 CSS
input[type=number]::-webkit-inner-spin-button, 
input[type=number]::-webkit-outer-spin-button { 
  -webkit-appearance: none; 
  margin: 0; 
}

언제까지의 개인정보처리방침

1. 개인정보의 처리 목적 언제까지 은(는) 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다. - 고객 가입의사 확인, 고객에 대한 서비스 제공에 따른 본인 식별.인증, 회원자격 유지.관리, 물품 또는...