투자와 관련된 좋은 링크

(재무제표로 돈 버는 회사 추려내는 방법)


https://storyfunding.kakao.com/episode/37866


- 싸고 좋은 기업이 아니면 주식을 사지 않는다.

- 자산가치가 높고 성장성도 높은 주식을 산다.

- PER, PBR은 보지 않는다. (분식!!)

- 현금계산서, 손익계산서를 본다

Posted by 김용환 '김용환'

맥 OS 사용자에게 도움이 되는 오픈 소스 애플리케이션을 소개한 페이지다.

(사실 정확히 말하면 개발자를 위한 것 같다..)


https://github.com/serhii-londar/open-source-mac-os-apps





Posted by 김용환 '김용환'




2018 아마존(서울) aws 발표 중 좋았던 내용은 community에 있었다...


https://aws.amazon.com/ko/summits/seoul/on-demand/community/


Posted by 김용환 '김용환'




OpenTSDB를 사용하고 있는 모니터링 장비를 개발하고 있다.


모니터링하는 전체 장비 이름(hostname) 목록을 얻어 API에서 suggest할 때 바로 장비 이름이 나오고


"서비스 이름-장비 이름" 매핑에 대한 값을 아주 신속하게 처리할 수 있도록 해야 하는 일이 있었다.


15분짜리 배치 잡을 1초의 배치 잡으로 바꾼 practice를 소개하고자 한다.




OpenTSDB의 아키텍처는 Hbase 기반이고 TSD라는 데몬을 사용하고 있다. 

(특히 downsampling이라는 훌륭한 개념을 탑재하고 있다는 장점을 갖고 있다.  )




1. 문제 해결 #1

15분짜리 배치에서는 OpenTSDB의 suggest API를 통째로 읽어오는 일을 하는 데 10분의 시간이 소요되었다.


http://opentsdb.net/docs/build/html/api_http/suggest.html api는 오래전에 만들어진 플랫폼이라.. pagination이 없다.


이 부분을 OpenTSDB가 아니라 HBase Client Libarary를 사용해 직접 읽고 ES에 저장했다. 


http://opentsdb.net/docs/build/html/user_guide/backends/hbase.html#uid-table-schema


  • metrics for mapping metric names to UIDs
  • tagk for mapping tag names to UIDs
  • tagv for mapping tag values to UIDs.

Within the id column family is a row with a single byte key of \x00



그리고 매번 모두 읽지 않도록 zookeeper에 읽고 난 뒤의 정보를 zk에 저장했다.



2. 문제 해결 #2

opentsdb에 서비스 이름-호스트 이름 매핑 구조를 알 수 있지만, 모든 정보를 다 읽을 수는 없다.


"서비스이름-호스트 이름" 매핑 DB 정보를 따로 읽는 부분이 있었고 소요시간은 2분 30초였다.


이를 모두 DB 커넥션에 매번 읽는 구조가 아닌 Connection Pool을 사용했고 역시 테이블을 사용할 때 읽고 난 뒤의 index를 zookeeper에 저장했다. 


그랬더니. 2분 30초 배치가 0.3초로 줄어들었다.



증분 배치의 개념은 "증분 백업" 개념과 동일하다.





<결론>

문제 해결 #1,#2 보면 Divide & Conquor, 증분(increment) 방식을 사용했다.

(모든 데이터를 읽는 게 최대한 회피한다!!)



그리고 zk에 저장된 데이터에 실제 처리 시간을 작성해 시간이 밀리거나 동작이 안되면 jenkins에서 모니터링 잡에서 노티가 오도록 했다.



chronos를 이용해 30초마다 배치 잡을 돌리는데. 1초만에 배치 잡 동작이 완료되었다.. 







Posted by 김용환 '김용환'




hive 쿼리 사용시 필드의 이름에 특수 문자가 포함될 수 있다.

이럴 때는 regexp_replace를 사용해 필드 문자열을 변경해야 한다. 



SELECT  get_json_object(regexp_replace(data, 'error.url', 'url'), '$.url'), data

FROM google_log_src

WHERE dt = '20180426'  and hr='10'  limit 10;




참조


https://jprakashblog.wordpress.com/2015/08/11/hive-get_json_object-having-special-characters/






Posted by 김용환 '김용환'



클라우드 아키텍처 그림 그리는 툴


https://cloudcraft.co/app



1탭은 Design으로 그림을 그린다.


공유기능은 링크와 이미지만 있다. (visio처럼 xml로 나오지는 않는다.)


<링크>

https://cloudcraft.co/view/4d5731b7-7e14-43e2-b8e5-5b329a2bd6c3?key=3m40jn0enpfd2t90


<이미지>

https://cloudcraft.co/api/blueprint/4d5731b7-7e14-43e2-b8e5-5b329a2bd6c3/png?grid=true&transparent=false&width=1280&height=720






3탭의 예산 정보도 볼 수 있다.






2탭은 Live인데, 실제 그림 그리는대로 아마존 설계를 한다.


Welcome to Cloudcraft Live

Live mode allows you to link your real AWS infrastructure with your diagrams.


이 부분이 cloudcraft 회사가 창출하는 부분이다.




Posted by 김용환 '김용환'



docker 파일에서 java docker repository를 사용하려 할 때 다음을 참조할 수 있다. 


https://github.com/docker-library/repo-info/tree/master/repos/java/remote




예를 들어 docker 파일에 아래와 같이 사용한다면.


FROM java:openjdk-8-jdk-alpine


바로 아래 url의 docker 이미지를 사용하게 된다.


https://github.com/docker-library/repo-info/blob/master/repos/java/remote/openjdk-8-jdk-alpine.md



openjdk 8 111 버전을 사용하는 버전이다.. 


Posted by 김용환 '김용환'



일래스틱서치(elasticsearch) 6에서 템플릿 목록 보기


$ curl -s "http://es-server:9200/_cat/templates?v&s=order:desc,template"


name                                         template                                order version

slowlog                                      *                                                    0

template_name                            google_api-*                              0



특정 템플릿을 살펴보기


$ curl -s http://es-server:9200/_template/템플릿_이름 | python -mjson.tool


자세한 정보 나옴.




특정 템플릿 저장하기


$ curl -XPUT -H "Content-type:application/json" http://es-server:9200/_template/템플릿_이름 -d @파일이름



Posted by 김용환 '김용환'





mesos 1.3.1 에서 mesos-slave를 재시작한 후 상태 로그를 확인하려면 다음과 같다. 


curl 'http://${mesos-slave IP}:5051/slave(1)/state'

...

"attributes": {

  "ip": "${mesos-slave IP}",

  "os": "Ubuntu",

  "os-version": 16

},

...




/etc/default/mesos-slave 설정을 수정할 때는 조심해야 한다. 



export MESOS_ATTRIBUTES="ip:1.1.1.1;os:Ubuntu;os-version:16;server-type:user"라는 기본 값이 있을 때..


key:value라는 값을 추가하니 동작한다. key=value하면 mesos-slave 데몬이 뜨지 않는다.  위의 상태 체크 URL를 호출해본다. 

아래와 같이 수정한다.


export MESOS_ATTRIBUTES="ip:1.1.1.1;os:Ubuntu;os-version:16;server-type:user;key:value" 




* 주의할 점.


1. 설정할 때 key=value가 아니라 key:value이다. (콤마)


2. /etc/default/mesos-slave의 property를 수정할 때는 


MESOS_WORK_DIR를 지정한 디렉토리의 모든 파일을 지우고(sudo rm -rf 메소스_작업_DIR/*) 재시작해야 한다. 

(예, export MESOS_WORK_DIR=/var/mesos)



만약 MESOS_WORK_DIR 디렉토리를 지우지 않고 재시작하면 아래와 같은 에러가 발생한다.


$ sudo service  mesos-slave status

● mesos-slave.service - Mesos Slave

   Loaded: loaded (/lib/systemd/system/mesos-slave.service; enabled; vendor preset: enabled)

   Active: activating (auto-restart) (Result: exit-code) since Fri 2018-12-13 19:38:33 KST; 7s ago

  Process: 3343 ExecStart=/usr/bin/mesos-init-wrapper slave (code=exited, status=1/FAILURE)

 Main PID: 3343 (code=exited, status=1/FAILURE)


Apr 13 19:38:33 media-site-node51 systemd[1]: mesos-slave.service: Unit entered failed state.

Apr 13 19:38:33 media-site-node51 systemd[1]: mesos-slave.service: Failed with result 'exit-code'.



Posted by 김용환 '김용환'


레드햇에서 클라우드 네이티브 컨테이어 디자인 관련 문서(쿠버네티스)를 공유했다. 






http://blog.kubernetes.io/2018/03/principles-of-container-app-design.html?m=1




https://www.redhat.com/cms/managed-files/cl-cloud-native-container-design-whitepaper-f8808kc-201710-v3-en.pdf


PRINCIPLES OF

SOFTWARE DESIGN:

•Keep it simple, stupid (KISS)

•Don’t repeat yourself (DRY)

•You aren’t gonna need it

(YAGNI)

•Separation of concerns (SoC)

RED HAT APPROACH

TO CLOUD-NATIVE

CONTAINERS:

•Single concern principle (SCP)

•High observability

principle (HOP)

•Life-cycle conformance

principle (LCP)

•Image immutability

principle (IIP)

•Process disposability

principle (PDP)

•Self-containment

principle (S-CP)

•Runtime confinement

principle (RCP)



레드햇 아키텍트가 infoq에 쓴 글이다.


https://www.infoq.com/articles/kubernetes-effect



Posted by 김용환 '김용환'