grafana에서 특정 metric을 downsample을 1m으로 하면 잘 보이는 장점이 있다.

그러나 해당 메트릭 패널이 많이 모인 dashboard에서는 당연히 DataSource(예, tsdb)가 영향을 받을 수 있다. 

따라서 auto downsampling을 하는 게 좋다.

자세한 내용은 아래를 참고한다.

https://railsadventures.wordpress.com/2015/07/17/advanced-grafana-using-automatic-intervals/


Posted by 김용환 '김용환'


opentsdb 개발 환경 구성하기


$ git clone https://github.com/OpenTSDB/opentsdb.git

$ cd opentsdb

$ sh build.sh pom.xml

$ mvn compile



intellij에서 open project... maven 기반으로 읽는다. 


그래도 source generated되는게 있어서 완벽하지 않지만 그럭저럭 쓸만하다.



Posted by 김용환 '김용환'

[openstack] flavor 추가

Cloud 2018.06.16 11:54


admin 권한으로 보고 사용할 수 있는 openstack에서의 flavor가 따로 있다.

내 계정으로는 admin 권한으로 사용할 수 있는 flavor는 admin권한의 flavor의 subset이다.


따라서 내 계정으로 가지고 있는 않는 flavor로 openstack instance를 생성하고 싶다면, 프로젝트에 flavor 생성 권한이 있어야 한다.


현재 가지고 있는 권한은 다음과 같다. 


$ openstack --os-project-name GOOGLE_PLUS flavor list


+--------------------------------------+-----------+------+------+-----------+-------+-----------+

| ID                                   | Name      |  RAM | Disk | Ephemeral | VCPUs | Is Public |

+--------------------------------------+-----------+------+------+-----------+-------+-----------+

| 9933ea88-9535-4b04-add8-910e08c01aea | m1.medium | 

| cdb20a75-87a5-43d3-b75b-a5331cad8cb7 | m1.small  | 

| e3739ce3-746c-4e3f-820e-eb9803fa4e62 | m1.large  | 

+--------------------------------------+-----------+------+------+-----------+-------+-----------+



admin 권한으로 접속해 사용할 수 있는(권한을 줄 수 있는) flavor를 확인한다. 

$ openstack flavor list
...
| 66be1e64-2776-4457-a31e-923340e583a2 | r1.xlarge |...
..



여전히 admin 권한으로 66be1e64-2776-4457-a31e-923340e583a2 flavor를 내 프로젝트에 추가한다.

$ openstack flavor set 66be1e64-2776-4457-a31e-923340e583a2 --project GOOGLE_PLUS

그리고 제대로 추가되었는지 확인한다.

 $ openstack --os-project-name KEMI-SAURON flavor list
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+
| ID                                   | Name      |   RAM | Disk | Ephemeral | VCPUs | Is Public |
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+
| 66be1e64-2776-4457-a31e-923340e583a2 | r1.xlarge | 
| 9933ea88-9535-4b04-add8-910e08c01aea | m1.medium | 
| cdb20a75-87a5-43d3-b75b-a5331cad8cb7 | m1.small  | 
| e3739ce3-746c-4e3f-820e-eb9803fa4e62 | m1.large  | 
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+


openstack horizon 또는 cli를 사용할 때 추가된 flavor로 인스턴스를 생성할 수 있다. 







Posted by 김용환 '김용환'


nova 커맨드를 실행하다가 아래와 같은 에러를 만났다.


$ nova quota-show --user $projectUser --tenant $project

ERROR (AttributeError): 'unicode' object has no attribute 'get'




다음 코드를 써서 해결할 수 있는 경우가 있다.


export PYTHONIOENCODING=UTF-8



그래도 에러가 발생하면. 이전 컴맨드에 --debug를 추가하면.. 확실히 알 수 있다.


 404 not found.. API 이슈이다. 


$ nova quota-show --user $projecUser --tenant $project --debug

DEBUG (session:198) REQ: curl -g -i -X GET https://code.google.io:5000/v2.0/ -H "Accept: application/json" -H "User-Agent: python-keystoneclient"

...

DEBUG (connectionpool:387) "GET /v2/ae17dbd7165142808e074579360a8b9c HTTP/1.1" 404 112

DEBUG (session:215) RESP: [404] Date: Tue, 12 Jun 2018 08:01:07 GMT Content-Length: 112 Content-Type: application/json; charset=UTF-8 X-Compute-Request-Id: req-0a8e18ed-860e-4dcb-a566-f7eb02fb19bd

RESP BODY: {"message": "The resource could not be found.<br /><br />\n\n\n", "code": "404 Not Found", "title": "Not Found"}


DEBUG (shell:909) 'unicode' object has no attribute 'get'







Posted by 김용환 '김용환'



https://www.openstack.org/summit/vancouver-2018/summit-schedule/global-search?t=Yuki%20Nishiwaki





Excitingly simple multi-path OpenStack networking: LAG-less, L2-less, yet fully redundant from LINE Corporation


Posted by 김용환 '김용환'

[펌] Istio 내부 구조

Cloud 2018.05.24 20:19




openshift에서 밀고 있는 istio의 개념을 살펴본다. (redhat 원래 발표자가 한 말은 아니지만 이해한 내용을 기반으로 거의 들어맞는 얘기를 해본다)




서비스에 다양한 기능(discovery, lb, resiliency, metrics, tracing)을 가진 jvm 애플리케이션에 docker로 개발하는 MSA를 진보적으로 바꿔보자. 





istio를 사용함으로서..

서비스만 jvm 애플리케이션으로 개발하고 나머지는 istio가 책임져 줄께.. 


kubenetes를 사용할꺼야. Pod 안에 jvm container 하나 있고, sidecar container(envoy)라는 것을 추가할 꺼야. 

sidecar container(envoy)를 사용하면 쉽게 MSA 서비스만 개발하면 될꺼야.





istio control plane이 쿼터 부터 api, config, rate limiting, ca 등등을 지원할꺼야. 


프로토콜? http는 물론 gRPC, TCP(TLS 포함)까지 지원한다.

근데 thrift는 지원하지 않아 보이지만.. 최근에 추가되었다.

https://github.com/istio/istio/tree/master/vendor/github.com/apache/thrift









실제 내부 구조는 다음과 같다. enovy와 Mixer가 핵심적인 서비스로 동작한다. 


https://developer.ibm.com/dwblog/2017/istio/







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 김용환 '김용환'


오픈 스택의 overcommit 정보



https://docs.openstack.org/arch-design/design-compute/design-compute-overcommit.html




오픈 스택의 가상화 서버의 overcommit 기본 값은 다음과 같이 되어 있다.  가상 서버를 사용할 때 효율을 위해서 비율이 크다.


  • CPU allocation ratio: 16:1
  • RAM allocation ratio: 1.5:1



CPU allocation ratio가 16:1이라는 의미는 스케쥴러가 물리 코어 하나 당 16개의 가상 코어를 쓸 수 있도록 할당하겠다는 의미이다. 물리 서버가 12코어가 있다면.. 스케쥴러는 192개의 가상 코어를 사용할 수 있다. 인스턴스당 4 가상 코어를 쓰겠다고 하면.. 물리 서버의 192개중 48 인스턴스를 제공한다는 의미이다.


오픈 스택 문서를 보면 설명이 잘 나와 있다. 


OR
CPU overcommit ratio (virtual cores per physical core)
PC
Number of physical cores
VC
Number of virtual cores per instance

인스턴스 개수 = (OR*PC)/VC





https://inter6.github.io/2016/04/22/nova-overcommit/ 이 분의 글이 좋아서 발췌한다.



  • (Instance Count) = (Overcommit Ratio) * (Physical Cores) / (vCores per Instance)
  • (Overcommit Ratio) = (Instance Count) / (Physical Cores) * (vCores per Instance)



만약 인텔의 Hyper-Thread 기능을 사용할 경우, Mirantis에서는 총 코어 개수를 물리 코어 x 1.3 으로 계산할 것을 가이드한다.

다음 환경에서 오버커밋 비율로 생성해낼 수 있는 인스턴스 개수는 다음과 같다.

  • 인텔 E5-2640 v3 2.6Ghz 8Core x 2way
  • Hyper-Thread 활성화
  • 인스턴스당 평균 4개의 코어를 사용
Overcommit RatioInstance CountPhysical CoresvCores per Instance
15.220.84
210.420.84
420.820.84
841.620.84
1683.220.84



Posted by 김용환 '김용환'


Dockerfile에서  USER를 nobody로 설정해서. docker container를 띄워서 톰캣이 재시작되지 않는 버그를 발견했다.


centos, mac에서는 잘 동작하는데, ubuntu에서만 동작하지 못했다.


Permission denied.. 분명 권한이 있는데로 파일 생성을 어느 path에서는 할 수 있고, 어느 path에서는 할 수 없었다.



nobody@08678a6be7c9:/usr/local/tomcat$ ls -al
total 120
drwxr-sr-x 28 nobody nogroup  4096 Apr  9 15:32 .
drwxrwsr-x 23 root   staff    4096 Apr  9 15:32 ..
-rw-r-----  1 nobody nogroup 57092 Sep 28  2017 LICENSE
-rw-r-----  1 nobody nogroup  1723 Sep 28  2017 NOTICE
-rw-r-----  1 nobody nogroup  7064 Sep 28  2017 RELEASE-NOTES
-rw-r-----  1 nobody nogroup 15946 Sep 28  2017 RUNNING.txt
drwxr-x---  2 nobody nogroup  4096 Nov  8 19:45 bin
drwx--S---  2 nobody nogroup  4096 Apr  9 15:30 conf
drwxr-x---  2 nobody nogroup  4096 Nov  8 19:45 lib
drwxr-x---  2 nobody nogroup  4096 Sep 28  2017 logs
drwxr-x---  2 nobody nogroup  4096 Nov  8 19:45 temp
drwxr-x---  9 nobody nogroup  4096 Apr  9 15:32 webapps
drwxr-x---  2 nobody nogroup  4096 Sep 28  2017 work

nobody@08678a6be7c9:/usr/local/tomcat$ touch a
nobody@08678a6be7c9:/usr/local/tomcat$ ls a
-rw-r--r--  1 nobody nogroup     0 Apr  9 16:51 a


nobody@08678a6be7c9:/usr/local/tomcat/logs$ touch a
touch: cannot touch ‘a’: Permission denied


docker info를 통해 driver를 확인했다. 

mac은 overlay2를 사용하고 있고. centos는 overlay, ubuntu는 aufs를 사용하고 있었다.


aufs 정보는 다음과 같으며 https://docs.docker.com/storage/storagedriver/aufs-driver/..


docker 공식 문서에서는 더 이상 aufs를 사용하지 않고 overlay를 사용하라고 되어 있다.

https://docs.docker.com/storage/storagedriver/overlayfs-driver/





mesos, docker 장비에서 docker 파일 드라이버를 aufs로 overlay로 변경했다. 



로컬에 저장된 기존 도커 container 모두 중단 및 docker image 삭제한다.


$ docker rm $(docker ps -qa)

$ docker images

$ docker rmi ...




시스템 설정을 변경한다.



$ sudo -i

 

$ CONFIGURATION_FILE=$(systemctl show --property=FragmentPath docker | cut -f2 -d=)

#/etc/systemd/system/docker.service


$ cp $CONFIGURATION_FILE /etc/systemd/system/docker.service

 

$ perl -pi -e 's/^(ExecStart=.+)$/$1 -s overlay/' /etc/systemd/system/docker.service



$ cat > /etc/docker/daemon.json

{

    "storage-driver": "overlay"

}


$ service mesos-slave restart #메소스 사용중이라면.. 반드시.

$ service docker restart 



그리고.  $ docker info를 실행해 docker 기본 filer driver가 overlay인지 확인한다.

docker container를 실행한 후, docker insepect $container_id로 확인해서. overlay인지 확인한다.

정상적으로 잘 동작하면 ok










Posted by 김용환 '김용환'