Prometheus를 설치 했으니 Grafana로 모니터링을 진행해 보자.


사이트 : http://docs.grafana.org/


Grafana 란?


- metric 분석 및 시각화한 제품군으로서 Open source 

- 인프라 및 App 분석 데이터를 시각화로 많이 사용하지만 뿐만 아니라 산업용 센서, 자동화, 날씨, 프로세스 제어 등에서도 사용됨


간단하다.........즉 Prometheus 의 Metric 을 이용하여 해당 정보를 시각화 하여 보여 준다는 것이다.

그 외의 사용에 대해서는 테스트 하지 않아서 모르겠다.




그러면 앞서 Prometheus를 설치 및 데이터 수집ㅇㅣ 되는 것을 확인 하였다.

이제는 그 위에 Grafana를 설치해서 수집된 데이터를 한번 그래프화 해 보자.

Prometheus도 자체의 그래프를 가지고 있지만 심플하고 다양한 Metric을 한 눈에 보기 힘들다는 단점이 있다. 이런 부분을 Grafana가 해결해 주는 것이다.


Grafana 설치 


* Ubuntu / Centos / Mac / Windows 등 다양하게 설치 할 수 있다.

* 아래 사이트를 참조 하자.

http://docs.grafana.org/installation/rpm/

https://www.percona.com/blog/2016/02/29/graphing-mysql-performance-with-prometheus-and-grafana/


나 역시 yum으로 설치를 진행 하였다.

설치 후에는 service grafana-server start로  실행했다.


이제 실행해 보자.

Prometheus와 동일하게 Grafana도 http://설치한서버IP:3000 으로 접속을 할 수 있으며,

초기 비밀번호는 admin / admin 이다.



이후 나는 몇일을 고생했다..어떻게 하는지 몰라서 말이다..ㅠㅠ


먼저 좌측 메뉴를 PIN으로 고정을 하자..

이 후 Data source를 통해 기본 서버를 구성하자.

아래 메뉴는 PIN으로 고정 및 Data Source를 선택 한 화면이며 Add data source 로 추가하자.



Type  은 Prometheus로 하고 url은 prometheus를 설정한 곳을 지정해 주자.


그리고 Direct로 접속 설정 후 save & Test를 하면 다음과 같이 확인할 수 있다.

나같이 성질 급하고 영어 못하고..컴맹은 메뉴얼을 봐도 삽질을 하고 결국은 해결은 하겠지만 몇일 걸릴 것이다.ㅠㅠ



위와 같이 떴다면 성공이다...

다시 Data Sources를 선택하면 다음과 같은 화면이 나올 것이다.



나온 화면에서 Dashboards를 선택해 보자.

이 후 Dashboards 의 New를 선택해서 하나씩 나의 대쉬보드에 원하는 데이터를 추가해 보자



여러 템플릿이 있겠지만 가장 많이 사용하는 Graph를 이용해서 추가해 보자.

Graph를 선택해 보자.



앗!!뭔가 나왔다...하지만 뭔가가 이상하다.

나는 수집도 하지 않은 데이터가 차트로 그려졌다.


정확하게 다시 말하면 내가 node를 설치하기 전의 데이터도 수집 된 것으로 나온다.

뭔가가 이상하다....(처음에는 이게 끝인줄 알았다.....ㅠㅠ)



Panel Title이라는 글씨를 누르게 되면 상단처럼 위에 View - Edit - Duplicat - Share 등이 나온다.

여기서 Edit를 선택해 보자



그래...밑에 Metrics라는 것이 있는데 내용에 fakedata source 라고 나온 것을 확인할 수 있다.


즉. 해당 데ㅇㅣ터는 임시 데이터로써 나의 수집된 데이터와는 무관하다는 뜻이다.



하단에 Panel data source 항목 옆 default를 선택하면 우리가 Data source로 추가한 Test_Source가 나온다. 

Test_Source 를 추가하면 아래와 같이 나온다.



이제 우리가 원하는 Metric 을 추가할 수 있다.

Metric looup 항목에 metric name을 선택하면 여러가지 Metric이 항목으로 ㄴㅏ올 것이다.

여기서 원하는 Metric을 선택해 주자.



정말 환호의 순간이다..원하는 데이터가 나온다.

하지만 여기서 나의 센스가 없는 모습이 나온다.

다른 항목을 선택했더니 데이터가 나오지 않았다...열심히 삽질했다.



정말 센스있는 사람이라면 찾았을 것이다. query의 내용이 겹쳐있다는 것을...

쿼리는 우리가 원하는 데이터를 다시 한번 더 가공할 수 있다. 하지만 여기서는 가공하는 방법을 알려주지 않는다.


원하는 분은 아래를 참고하시기 바랍니다.

Query Edit

http://docs.grafana.org/features/datasources/prometheus/#query-editor



쿼리 내용을 깨끗이 지우고 다시 Metric을 추가하면 원하는 데이터가 나올 것이다.

원하는 데이터가 나왔다면 X 를 누르면 된다.

걱정 안해도 된다 이미 저장 되어 있기 때문이다.



이와 같은 방법으로 2개를 만든 모습ㅇㅣ다.

이렇게 원하는 정보들을 추가하면 한 화면에 여러개의 원하는 정보를 모니터링 할 수 있을 것이다.



정말 화려한 그래픽이다...

그래서 원하는 내용을 빠르게 보거나 아니면 패턴을 빨리 익힐 수 있다.




패턴을 알고 나면 이제는 어떤 부분이 문제가 있는지..또는 배치가 얼마나 자주 도는지..

그에 대한 메모리 사용을 확인하고 수정이 필요한지...

아니면 확장을 할 것인지 많은 해결 방법을 찾을 수 있다.


잠시 몇달동안 일을 하면서 팀장님에게 배운 것 중 가장 기억에 남는것이 있다면 바로 모니터링이다.


모니터링이 누구에게는 따분할 수 있지만..

모니터링을 잘 활용하면 얼마든지 개선할 수 도 있고, 패턴을 익혀 프로그램의 주기를 변경할 수 있는 기회가 생긴다.

프로그램의 주기를 변경하면 효율적으로 자원을 활용할 수 있고 자연스럽게 장애도 예방된다.


또한 패턴을 이용해서 해당 시점의 쿼리를 수집하여 튜닝을 할 수도 있고..

무슨일이 어떻게 돌아가는지 익힐 수 있는 기회가 생긴다.


그러니 모니터링을 하찮게 생각하지 않았으면 한다.

경계에 실패한 자는 용서할 수 없듯이.. 모니터링에 실패하는 자는 훌륭한 DBA가 될수 없다고 혼자 생각해 본다-ㅎㅎ

반응형

'Monitoring > Prometheus' 카테고리의 다른 글

[Prometheus] 프로메테우스 설치 및 개념  (1) 2017.03.17

이직한지 3개월째 되어가고 있지만 아직도 많이 부족하고 내가 모르는 것들이 많다는 것을 계속 느끼고 있다.


정말 이럴때는 자괴감??까지 들 정도이다..ㅎ

그래도 새로운 것을 공부하고 설치해 보고 이에 대해서 팀장님이랑 의논하다 보면 스트레스가 오히려 지식으로 바뀌어 나가고 있다는 것을 느낄 때도 많다.


오늘은 여기까지만 잡설을 하자...ㅋ


Prometheus라는 모니터링 툴이 있으니 한번 검토해 보라는 오더를 받았다.

하지만 이놈의 꽂히는게 어디냐에 따라서 다른 방향으로 가는경우가 있다 보니 이번에도 실컷 Prometheus라고 생각한 것을 Grafana만 해버린 꼴이 되었다.


덕분에 Prometheus 와 Grafana에 대해서 둘다 경험할 수 있는 좋은 기회가 되었다.


내가 조사하고 느낀 것 뿐만 아니라 테스트 한 것에 대해서 공유해 본다.


1. Prometheus란?

원문 : https://prometheus.io/docs/introduction/overview/


아래는 내가 임의로 번역???은 아니고 구글 번역기를 이용해서 정리한 것이다.

그냥 참고만 하셨으면 한다.


- SoundCloud에서 만든 open source 모니터링이며(라이센스 -Apache license V2), 알림 툴킷 (2012년에 개발 되었으며, 많은 회사와 조직에서 사용되고 있으며 독립형 오픈소스 프로젝트)

- 다차원 데이터 모델 (메트릭 이름과 키 / 값 쌍으로 식별되는 시계열)

- 데이터는 key-value 형태의 NoSQL제품인 LevelDB에 저장


- 단일 차원을 활용하는 유연한 쿼리 언어를 사용하여 원하는 데이터를 표현 가능(메트릭 내부 데이터를 이용 )

- 분산 저장 장치에 의존하지 않는다.

- 단일 서버 노드는 자율적입니다. - 각 역활별 노드들이 있으며 해당 노드들을 이용해서 원하는 정보를 확인 가능 

- HTTP를 통한 풀 모델을 통해 시계열 컬렉션이 발생합니다.(웹 브라우저를 통해서도  접근이 가능)

- 푸시 타임 시리즈는 중간 게이트웨이를 통해 지원됩니다.

- 대상은 서비스 검색 또는 정적 구성을 통해 검색됩니다.

- 다양한 그래프 및 대시 보드 지원 모드


적합한 곳
- 순수 시간 기반 모니터링 툴이며 여러 서버에 대해 최고의 역동적인 서비스에 적합한 모니터링 툴
- Prometheus는 신뢰할 수 있게 설계되어 있으며 빠르게 문제를 진단할 수 있음
- 각각의 Prometheus 서버는 독립적이며, 네트워크 저장소나 다른 원격 서비스에 의존적이지 않음

미적합한 곳
- 100% 상세하고 완벽하지 않음(통계성 데이터를 보는 곳)

이렇게 작성해 놓으니 알듯 말듯 하다...그래서 맨 하단에 블로그를 참조하면 더 좋은 정보를 확인할 수 있다.


하아...그래 정의는 그렇다고 치자...그렇다면 작동원리는 어떻게 되는지 알아보자

그전에 아키텍처 그림을 보자. 해당 그림은 Prometheus 홈페이지에서 확인 가능하다.



2. Prometheus 작동원리

- 흔히들 아키텍쳐라고 부름.

- Prometheus 모듈로는 / alertmanager / blackbox_exporter / consul_exporter / graphite_exporter / haproxy_exporter / memcached_exporter / mysqld_exporter / node_exporter / pushgateway / statsd_exporter 로 구성 

- Pull 방식으로 클라이언트들에 접근해서 데이터를 가져오는 형태

- Exporter 가 정보를 수집하여 HTTP end point를 열어서 Prometheus가 데이터를 수집해 갈 수 있도록 함(웹브라우저로 직접 접속하여 해당 정보를 볼 수 도 있음-Metric)


그렇다면 서버나 지수를 추가하려면 어떻게 해야하나..?


- 각 서버에 에이전트 파일을 실행 후 Prometheus 를 재시작(Prometheus 내 prometheus.yml에 정보를 추가 후 재기동)

- 재기동 후에는 제대로 올라왔는지 status의 Targets에서 확인


- 알림기능

- Grouping으로 해서 여러 알람을 하나의 알람으로 받을 수 있음 (여러번 알람을 받는것이 아닌 여러개를 하나의 알람으로 받음)

- Alert Manager 를 통해서 규칙을 설정하면 그 규치에 따라 알람을 보낼 수 있음(병목 현상을 찾기 보다는 해당 규칙을 정하면 그 규칙에 따라 먼저 확인이 가능)




* 하아..이렇게 써도 어렵구나...


간단하게 정리하자면 Prometheus 서버는 각 노드(관리하고자 하는 서버들에 자기가 원하는 모듈들을 설치 후 실행)들에 방문을 해서 각 노드들이 수집한 정보들을 가져오는(Pull) 방식으로 구성되어 있다.

각 노드들에 방문하기 위해서는 기본적으로 Prometheus 서버를 실행할 때 prometheus.yml 파일을 참조하는데...해당 파일에 각 노드들의 정보( IP 등)를 가지고 있어야 한다.


제가 이해하고 정리한 부분이기에 혹시라도 틀렸다면 댓글로 알려 주시면 감사하겠습니다.



흠...이렇게 힘들게 글로 읽고 조금이라도 이해 했다면 이제 진행해 보자.


1. Prometheus 설치 및 구성


다운 받을 위치는 다음과 같다

https://prometheus.io/download/


설치 방법은 아래와 같다

https://prometheus.io/docs/introduction/install/

https://prometheus.io/docs/introduction/getting_started/


사실 설치라고 하기 보다는 압축을 풀고 구성하면 된다.


이제 prometheus.yml 수정해보.


아래 보면 Target에는 모니터링 하고자 하는 서버들의 IP를 설정하고 내가 모니터링 하고자 모듈은 node_export / mysqld_exporter 이다.

그에 대한 포트는 9100 과 9104 이다.

그리고 두대의 모니터링 서버이며...그거에 대한 명은 'linux' , 'linux2' 로 명명 했다. - job_name


이제 prometheus 서버는 구성이 완료 되었다. 실행은 각 노드들(모듈)을 설치하고 실행하자.




2. 모듈 설치 및 구성


나는 node_export 와 mysqld_export를 통해 원하는 데이터를 읽어 오려고 한다.

각 서버에 모듈을 설치해 보자.

아래 사이트에서 원하는 모듈을 다운 후 압축을 풀어보면 파일이 하나만 생길 것이다.

(모듈을 다 설치해 보지 않았으나 내가 원하는 모듈들은 nodex_epxort / mysqld_export 만 했기에..)

모듈 : https://prometheus.io/download/


DB1에는 이미 prometheus 서버를 진행 했기 때문에 혼란을 ㅍㅣ하기 위해 DB2에서 모듈을 설정 및 실행해 보겠다.


먼저 node_exporter 압축 푼 곳을 확인해 보자


별 달리 설정해 줄 것이 없다.

ㅂㅏ로 실행해서 node_exporter가 수집할 수 있도록 하자.


9100포트가 오픈 되어 있으며 이제 수집을 진행할 것이다.


다음으로는 mysqld_exporter를 진행해 보자.



여기서 해야될 업무들이 있다. mysqld_exporter가 수집할 수 있도록 유저 생성 및 .my.cnf를 생성해서 유저 정보를 알려 주는 것이다.

설정 정보들은 아래 사이트를 참고해 주면 된다.


https://github.com/prometheus/mysqld_exporter


하지만 난 유저 생성시 PROCESS, REPLICATION CLIENT, SELECT 해당 권한만 주면 된다고 했는데 막상 실행해 보니 제대로 실행이 되지 않아서

다음과 같은 권한을 부여했다.


MariaDB > CREATE USER 'prom'@'localhost' IDENTIFIED BY 'prom';

MariaDB > CREATE USER 'prom'@'&' IDENTIFIED BY 'prom';

MariaDB > GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ,DROP, INDEX ON *.* TO 'prom'@'localhost'

  WITH MAX_USER_CONNECTIONS 3;

MariaDB > GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ,DROP, INDEX ON *.* TO 'prom'@'%'

  WITH MAX_USER_CONNECTIONS 3;

MariaDB > Flush privileges;


물론 항상 그런거는 아니었지만 나의 경우 서버에서는 다음과 같이 prom이 디비와 테이블을 생성 한 것을 확인할 수 있었다.


추측은 노드는 상관 없지만 서버에서는 Grafana와 연동 시 데이터를 남기는 작업을 진행하는 것 같아서 그런것 같다.

이거는 어디까지나 추측이기 때문에 아는 분이 계시면 댓글 부탁 드립니다.



유저를 생성 했다면 .my.cnf를 만들어 해당 유저와 패스워드 정보를 작성해 주자.


이것 까지 완료 하였다면 이제 mysqld_export를 실행하자.

이제 이 친구도 수집을 진행할 것이다.


이 작업들을 다른 서버에서도 동일하게 진행 해 주자.


서버들에서 모두 모듈들을 실행 했다면 마지막으로 Prometheus 서버에서 실행하자.


별 문제 없이 실행 되었다면 이제 웹에서 prometheus를 실행해 보자..


3. 운영 및 체크


이제 웹 페이지에서 http://프로메테우스서버IP:9090 으로 접속 해 보자.

혹시라도 접속이 안되거나 한다면 방화벽 포트를 의심해 보자.



첫..화면이다...참 심플하다.

이제 한번 정상적으로 프로메테우스 서버에서 각 서버 모듈들의 정보를 가져오는 지 확인해 보자.


Status > Targets 메뉴를 확인해 보자

정상 적으로 각 서버들에 접속해서 정보들을 가져오는 것을 확인 가능하다.

정상적으로 가져오지 못하고 있다면 State에서 다른 정보들이 보일 것이다.


예를들어서 DB2 ㅇㅔ서 mysqld_exporter 를 내렸을 경우다. Down...보기만해도 가슴이 철렁 거린다...ㅋㅋ

여기서 재미있는 부분이 해당 Endpoint 를 클릭해 보자.


무슨 텍스트들이 엄청나게 많다...

이 뜻은...각 메트릭스( Key) 에 대한 수집된 값(정보-value) 들을 볼 수 있다는 것이다.

즉..각 서버내 모듈들은 이렇게 Key-Value 형태로 정보를 가지고 있다가 Prometheus 서버가 직접 해당 모듈들을 http 로 호출해서 정보를 가져 온다는 것이다.


그렇다면 정의 의 내용들을 조금 이나마 이해 할 수 있을 것이다.


다음은 해당 프로메테우스가 수집한 정보를 보는 방법이다.

Execute 옆 드롭 박스를 클릭하면 메트릭 정보들이 쭉 나와 있을 것이다.

이 정보들을 선택 후 Execute를 하게 되면 수집된 정보들을 보여 줄 것이다.



ㄴㅏ는 go_gc_duration_seconds 라는 메트릭 을 선택후 결과를 보면(Execute 클릭) value가 쭉 나올 것이다.

여기서 다시 그래프를 누르면 그래프로 표현이 될 것이다.




이정도로 간단하게 사용하는 방법에 대해서 정리해 본다.


Grafana 는 다음 포스팅에서 진행해 보겠다.


참고로 이러한 Prometheus 의 좋은 기능 간단한 설치 방법 이 있으나 단 칼에 팀장님에게 잘린 이유는 다음과 같다.

이 내용들은 어디까지나 팀장님의 의견이고..나도 이해한 것이므로 반드시 그렇다!!!는 아니다.

절대적으로 잘 사용하는 곳이나 더 좋은 의견이 있으면 댓글로 남겨 주세요...많은 경험의 결과는 사용하신 분들이 잘 알기에 저는 그 의견들을 듣고 싶습니다.


사용 안하는 이유 

1. Pull 방식의 정보 수집

- Pull 방식은 각 서버에 접속해서 해당 정보들을 수집해 오는 방식이다. 그러다 보니 많은 서버가 추가가 되고 많은 모듈에서 데이터를 수집하며, 네트워크 속도가 좋지 못하다면 수집해 오는 대기 시간이 발생하기 마련이다. 하지만 OLTP 성의 DB의 경우 문제가 발생시 즉각적인 파악이 필요하다. Pull방식으로 수집 시 이런 딜레이 때문에 즉각적인 파악이 힘들 수 있으며 딜레이가 발생할 가능성 때문에  Prometheus를 사용하기 힘들다.


2. 각 모듈의 개별 설치

- 모듈이 필요하거나 서버가 늘어날 수록 해당 서버마다 모듈을 설치하고 설정을 해줘야 한다. 또한 추가 후에는 Prometheus서버를 재시작 해야 한다. 비록 간단할 지라도 이 또한 서버가 늘어 난다면 문제가 될 수 있으며 각각의 모듈의 최신화가 필요 하다면 이 또한 추가 작업으로 진행이 되어야 한다. 이러한 작업이 거절되는 이유 중 하나이다.


Prometheus는 어떠한 서버에서도 사용이 가능하다고 생각한다. 모듈에서 모든 정보??를 수집 하기 때문이다. 다양한 정보를 수집하고 볼 수 있는 장점이 있으나 앞서 생각해 봐야하는 2가지 이유로 적합하지 못하다는 팀장님과 나의 의견이었다.


중.소형 서버에서 간단하게 확인하기 위해서는 정말 좋고 강력하다. 하지만 2가지 문제점이 해결되지 못하다면 대규모에서는 사용하기 힘들지 않을까 조심스럽게 생각해 본다.


이 의견에 대해서도 반박??은 무서워요..ㅠㅠ의견을 주실 수 있다면 의견 주세요. 많은 분들에게 도움이 될 것 입니다. 또한 저에게도요!!!


그 외의 Alert 등의 자세한 내용 및 추가적으로 더 좋은 정보는 아래 블로그 참조하세요!!

정말 소개가 잘 나와 있어서 꼭 확인해 보세요!!


참고 : 

https://blog.outsider.ne.kr/1254

http://opennaru.tistory.com/126


반응형

Spine / Poller 설정


 - cacti 는 기본적으로 매 5분 단위로 체크를 하게 되는데, Spine 를 설정함으로써 매분간 체크를 할 수 있다.

 - Spine 를 설치하면 multi process 및 thread로 성능을 향상시킬 수 있다.

 - 이것 또한 해당 까페에 동일하게 잘 정리되어 있지만 여기서 에러난 부분에 대해서 정리해 보았다.


- 다운로드 : http://www.cacti.net/spine_download.php


wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.8b.tar.gz


압축을 푼 후 ./configure 를 하게 된다. 여기서 에러가 2번 발생한 부분에 대해 정리해 본다.


./configure 

[root@Cacti cacti-spine-0.8.8b]# ./configure

checking build system type... x86_64-unknown-linux-gnu

checking host system type... x86_64-unknown-linux-gnu

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... /bin/mkdir -p

checking for gawk... gawk

checking whether make sets $(MAKE)... yes

checking whether make supports nested variables... yes

checking for gawk... (cached) gawk

checking for gcc... no

checking for cc... no

checking for cl.exe... no

configure: error: in `/home/spine/cacti-spine-0.8.8b':

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details


해결방법

yum -y install gcc


설치 후 다시 진행


참조 : http://junemoon.tistory.com/30


./configure


checking for netinet/in_systm.h... yes

checking for netinet/in.h... yes

checking for netinet/ip.h... yes

checking for netinet/ip_icmp.h... yes

checking for unsigned long long... yes

checking for long long... yes

checking for an ANSI C-conforming const... yes

checking for size_t... yes

checking whether time.h and sys/time.h may both be included... yes

checking whether struct tm is in sys/time.h or time.h... time.h

checking return type of signal handlers... void

checking for malloc... yes

checking for calloc... yes

checking for gettimeofday... yes

checking for strerror... yes

checking for strtoll... yes

checking priv.h usability... no

checking priv.h presence... no

checking for priv.h... no

checking whether we are using Solaris privileges... no

checking sys/capability.h usability... no

checking sys/capability.h presence... no

checking for sys/capability.h... no

checking whether we are using Linux Capabilities... no

configure: error: Cannot find MySQL headers.  Use --with-mysql= to specify non-default path.



해결방법


yum install mysql-devel


위의 mysql-devel 설치


설치 후 다시 진행해 보자


./configure


checking for the maximum MySQL buffer size... 65536

checking whether we are using traditional popen... no

checking whether to verify net-snmp library vs header versions... no

checking for glibc gethostbyname_r... yes

checking for Solaris/Irix gethostbyname_r... no

checking for HP-UX gethostbyname_r... no

checking that generated files are newer than configure... done

configure: creating ./config.status

config.status: creating Makefile

config.status: creating config/config.h

config.status: executing depfiles commands

config.status: executing libtool commands


이제 make 및 install 진행해 보자


make && make install


spine.conf 수정


cp /usr/local/spine/etc/spine.conf.dist /usr/local/spine/etc/spine.conf

vi /usr/local/spine/etc/spine.conf


해당 DB 정보들을 수정해 주자

DB_Host         localhost
DB_Database     cacti
DB_User         cacti
DB_Pass         cacti
DB_Port         3306
DB_PreG         0


Cacti 에 등록을 진행하자.

해당 방법들은 모두 캡쳐해서 사진으로 대처




설정이 완료 되면 1분마다 체크하는지 로그를 확인해 보자


이것으로 Spine 설치 및 설정까지 완료 된 것을 확인할 수 있다.


이후 Percona Script 적용까지 진행 해 보았다.


반응형

'Monitoring > Cacti' 카테고리의 다른 글

[Cacti] 설치 -> MySQL Power group 참조  (0) 2016.07.27

http://cafe.naver.com/mysqlpg/16


해당 까페를 자주 보는데, 여기서 찾아서 진행 했다.

그래서 따로 퍼와서 작성하기에는 문제가 있을것 같아서 해당 링크를 연결했다.



반응형

'Monitoring > Cacti' 카테고리의 다른 글

[Cacti] Spine 설치 에러  (0) 2016.07.27

MySQL 관련하여 추가로 Percona 에서 제공하는 템플릿을 추가 함으로써

다양한 모니터링이 가능하다.


진행가능한 방법은 아래 사이트에서 확인하고 진행하면 된다.

https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html


yum으로 Install 할 수 있는데...직접 진행해 본 결과 yum으로는 진행이 안되어서 rpm 으로 설치를 직접 진행 하였다.


아래 사이트는 직접 파일을 다운받아 진행할 수 있다.

https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/


Installation Instructions

Configure Zabbix Agent

  1. Install the package from Percona Software Repositories:

    yum install percona-zabbix-templates
    

    or:

    apt-get install percona-zabbix-templates
    

    It will place files under /var/lib/zabbix/percona/. Alternatively, you can grab the tarball and copy folderszabbix/scripts/ and zabbix/templates/ into /var/lib/zabbix/percona/. See below for the URL.

  2. Copy Zabbix Agent config:

    mkdir -p /etc/zabbix_agentd.conf.d/
    cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix_agentd.conf.d/userparameter_percona_mysql.conf
    
  3. Ensure /etc/zabbix_agentd.conf contains the line: Include=/etc/zabbix_agentd.conf.d/

  4. Restart Agent:

    service zabbix-agent restart
    

Configure MySQL connectivity on Agent

On this step we need to configure and verify MySQL connectivity with localhost on the Agent node.

  1. Create .cnf file /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf as described at configuration file

    Example:

    <?php
    $mysql_user = 'root';
    $mysql_pass = 's3cret';
    
  2. Test the script:

    [root@centos6 main]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
    405647
    

    Should return any number. If the password is wrong in .cnf file, you will get something like:

    [root@centos6 ~]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
    ERROR: run the command manually to investigate the problem: /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg
    [root@centos6 ~]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg
    ERROR: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)[root@centos6 ~]#
    
  3. Configure ~zabbix/.my.cnf

    Example:

    [client]
    user = root
    password = s3cret
    
  4. Test the script:

    [root@centos6 ~]# sudo -u zabbix -H /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
    0
    

    Should return 0 or 1 but not the “Access denied” error.

Configure Zabbix Server

  1. Grab the latest tarball from the Percona Software Downloads directory to your desktop.
  2. Unpack it to get zabbix/templates/ folder.
  3. Import the XML template using Zabbix UI (Configuration -> Templates -> Import) by additionally choosing “Screens”.
  4. Create/edit hosts by assigning them “Percona Templates” group and linking the template “Percona MySQL Server Template” (Templates tab).

You are done.



위의 내용은 단순히 복사해서 왔다. 이 이상도 이 이하도 아니다.

다만, 3. Configure ~zabbix/.my.cnf 는 사실 zabbix mysql 를 설치했을 때 의미인 것 같다.

그래서 나는 /etc/my.cnf 에 user 와 password 를 작성 후 진행 하였다.


이 후 Test 스크립트를 진행하게 되면 예시와 동일하게 값이 나왔다.



Import 를 진행 후 보는바와 같이 Percona MySQL Server Template 가 뜬 것을 확인할 수 있다.



MySQL 모니터링을 보게 되면 많은 Item 이 추가 된 것도 확인할 수 있다.

다양한 부분에 대해서 모니터링을 진행할 수 있다.


이 이상으로 추가로 Zabbix 관련 모니터링이 있는지 검색해 봐야겠다.



반응형

테스트 중에 나의 주요 목적인 MySQL 모니터링이 제대로 되고 있는지 확인해 보았다.


역시나 Server down.....OTL....

너란 녀석은 정말 힘들구나...


먼저 로그를 보는게 가장 좋다.

zabbix_agentd.log (/var/log/zabbix) 확인을 해 보았다.


여러 에러가 있었지만 이 부분이 가장 화근이었다.



보는 바와 같이 아래 에러를 이해하면 될 듯 싶다.

이미 존재한다고 한다......으응??????????????하아.....존재한다고..먼말이야;;;;

설마 존재하더라도 또 실행해도 되는거 아닌가....ㅠㅠ

이 내용을 빨리 이해했다면 시간을 허비하지 않아도 되었을텐데;;;

 9347:20160718:174922.943 using configuration file: /etc/zabbix/zabbix_agentd.conf

  9347:20160718:174922.973 cannot add user parameter "mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -uzabbix -pzabbix -N | awk '{print $$2}'": key "mysql.status" already exists



 zabbix_agentd.conf 확인

- 여기서 해결되었다.

- 아래보면 Include 에서 나는 2개 동시를 include 하였다.

그래서 아래와 같이 하나만 실행되도록 하고 나머지는 모두 막았다.



이후 다시 실행 해 봤더니 되었다...(사실 에러가 발생하면 zabbix agent가 실행이 안되는 것을 확인 가능하다)


아래와 같이 MySQL 관련 항목들이 모두 받아 오고 있는 것을 확인 가능하다.




 결론 : 


zabbix_agentd.conf 에서 include를 2번이나 실행하면 안된다.


참고사항: https://www.zabbix.com/forum/showthread.php?t=40870



userparameter_mysql.conf


여기에는 추가적으로 이것저것 설정할 수 있다.

아래는 내가 테스트로 추가하다가 다 주석하고 제대로 된 default는 아니지만 참고 하면 된다.


mysql 또는 mysqladmin 에 문법에 맞춰 user와 패스워드를 작성해 줬다.

그리고 문법은 검색하면 나오지만 아래 사이트 참고하면 좋을 듯 싶다.


참고사항 : http://zabbix.dothome.co.kr/doku.php/manual/appendix/recipes


UserParameter=변수명,문법


인데...문법만 실행하면 해당 결과 값이 리턴되어 나온다.

리턴된 값을 변수에 담게 되고  zabbix 에서 사용하는 것으로 예상된다.

그래서 자신의 문법이 틀렸는지 여부는 바로 서버에서 확인하면 될 듯 싶다.


이 부분에서 에러생기면 또 실행이 안되니 이 점 필히 체크 필요하다.


UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -uzabbix -pzabbix -N | awk '{print $$2}'

# Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].

# Key syntax is mysql.size[<database>,<table>,<type>].

# Database may be a database name or "all". Default is "all".

# Table may be a table name or "all". Default is "all".

# Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".

# Database is mandatory if a table is specified. Type may be specified always.

# Returns value in bytes.

# 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table

UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -uzabbix -pzabbix -N'

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin -uzabbix --password=zabbix ping | grep -c alive

UserParameter=mysql.version,mysql -V

#UserParameter=mysql.ping,mysqladmin -uzabbix --password=zabbix ping | grep alive | wc -l | tr -d " "

#UserParameter=mysql.uptime,mysqladmin -uzabbix --password=zabbix status | cut -f2 -d ":" | cut -f1 -d "T" | tr -d " "

#UserParameter=mysql.threads,mysqladmin -uzabbix --password=zabbix status | cut -f3 -d ":" | cut -f1 -d "Q" | tr -d " "

#UserParameter=mysql.questions,mysqladmin -uzabbix --password=zabbix status | cut -f4 -d ":"|cut -f1 -d "S" | tr -d " "

#UserParameter=mysql.slowqueries,mysqladmin -uzabbix --password=zabbix status | cut -f5 -d ":" | cut -f1 -d "O" | tr -d " "

#UserParameter=mysql.qps,mysqladmin -uzabbix --password=zabbix status | cut -f9 -d ":" | tr -d " "

#UserParameter=mysql.version,mysql -V





반응형

아는만큼 보인다고..

나는 서버만 구성완료 하고 정작 제대로 되는지를 알지 못해서

뻘짓을 하고 있었다.


Zabbix 모니터링 중 Last 20 issues 에서 Zabbix agent on Zabbix server is unreachable for 5 minutes 라는 문구가 떠 있는것을 확인 하였다.


하지만 난 단순히 Zabbix server is running 이라고 되어 있어서 운용이 되는 줄 알았다.


전혀 Agent 와 통신을 못하고 있었던 것이다.


만약 Zabbix 서버가 다른곳에 있었으며, 해당 서버와 현재 Agent 와 통신을 하는 것이었다면 오히려 운용이 되었을 수 있다.

하지만 그게 아니었기에 내 서버는 지금 모니터링이 안되고 있었던 것이다.


이 말이 무엇이냐하면...


우리가 Agent 를 설치한 후 vi /etc/zabbix/zabbix_agentd.conf 를 수정하게 된다.


여기서 Server 부분을 수정하게 된다.



나는 현재 127.0.0.1 로 자신을 바라보게 되어 있다.

(만약 Zabbix Server와 Agent가 다른곳에 되어 있다면..대부분 다 그렇겠지만...해당 Zabbix Server IP를 작성하게 된다)


이후, zabbix 웹페이지에서 추가 수정 시 맞춰서 작성해 줘야 한다.



이 부분은 어디까지나 내가 테스트한 환경에 의한 것이고,

수정이 필요한 부분이다.


이 부분을 해결하고 나면 어떠한 에러도 나지 않을 것이다.


반응형

Zabbix 설치 중에 yum으로 install 에서 에러가 발생하는 경우가 있다.


첫번째 실패 후 기존 테섭이 아닌 신규 서버에 설치를 해서 Zabbix 를 설치 하였다.


이 후, 3버전에 설치하기 위해서 기존 테섭에 설치를 진행을 시도 중 동일한 에러를 찾았고

이번에는 너무 쉽게 해결했다...(기존에는 3시간 넘게 찾다가 포기했는데...ㅠ 오늘은 10분만에 해결..ㅠ)


먼저 사이트 공유

https://www.zabbix.com/forum/archive/index.php/t-41058.html



 yum install zabbix-server-mysql zabbix-web-mysql


여기서 첫번째 설치는 넘어간다.

하지만 두번째 zabbix-web-mysql 에서 에러가 생긴다.


...
---> Package net-snmp.x86_64 1:5.3.2.2-25.el5_11 set to be updated
--> Processing Dependency: libsensors.so.3()(64bit) for package: net-snmp
---> Package php-common.x86_64 0:5.1.6-45.el5_11 set to be updated
---> Package php-pdo.x86_64 0:5.1.6-45.el5_11 set to be updated
---> Package php53.x86_64 0:5.3.3-26.el5_11 set to be updated
--> Processing Dependency: php53-cli = 5.3.3-26.el5_11 for package: php53
--> Processing Dependency: php53-common = 5.3.3-26.el5_11 for package: php53
---> Package php53-bcmath.x86_64 0:5.3.3-26.el5_11 set to be updated
---> Package php53-gd.x86_64 0:5.3.3-26.el5_11 set to be updated
---> Package php53-mbstring.x86_64 0:5.3.3-26.el5_11 set to be updated
---> Package php53-xml.x86_64 0:5.3.3-26.el5_11 set to be updated
---> Package unixODBC.x86_64 0:2.2.11-10.el5 set to be updated
---> Package zabbix.x86_64 0:2.2.13-1.el5 set to be updated
--> Running transaction check
---> Package lm_sensors.x86_64 0:2.10.7-9.el5 set to be updated
---> Package php53-cli.x86_64 0:5.3.3-26.el5_11 set to be updated
---> Package php53-common.x86_64 0:5.3.3-26.el5_11 set to be updated
--> Processing Conflict: php53-common conflicts php-common
--> Finished Dependency Resolution
php53-common-5.3.3-26.el5_11.x86_64 from updates has depsolving problems
  --> php53-common conflicts with php-common
Error: php53-common conflicts with php-common
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest
The program package-cleanup is found in the yum-utils package.
....


여러 뻘짓을 다했지만 아래와 같이 진행하면 끝!!


[root@devDB:/root]#  yum remove php php-common php-cli

Loaded plugins: fastestmirror

Setting up Remove Process

No Match for argument: php

Loading mirror speeds from cached hostfile

 * base: ftp.kaist.ac.kr

 * extras: ftp.kaist.ac.kr

 * updates: ftp.kaist.ac.kr

Package(s) php available, but not installed.

No Match for argument: php-common

Package(s) php-common available, but not installed.

No Match for argument: php-cli

Package(s) php-cli available, but not installed.

No Packages marked for removal

[root@devDB:/root]#

[root@devDB:/root]#

[root@devDB:/root]# yum install php53

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

 * base: ftp.kaist.ac.kr

 * extras: ftp.kaist.ac.kr

 * updates: ftp.kaist.ac.kr

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package php53.x86_64 0:5.3.3-26.el5_11 set to be updated

--> Processing Dependency: php53-cli = 5.3.3-26.el5_11 for package: php53

--> Processing Dependency: httpd-mmn = 20051115 for package: php53

--> Processing Dependency: php53-common = 5.3.3-26.el5_11 for package: php53

--> Processing Dependency: httpd for package: php53

--> Running transaction check

---> Package httpd.x86_64 0:2.2.3-91.el5.centos set to be updated

---> Package php53-cli.x86_64 0:5.3.3-26.el5_11 set to be updated

---> Package php53-common.x86_64 0:5.3.3-26.el5_11 set to be updated

--> Finished Dependency Resolution

....


지우고 다시 설치다....하지만 난 저것도 해봤는데 안되었을까....


어쨋든 해결했다.ㅠ


반응형

난 CentOS 6.6 에 설치를 진행 하였다.


또한 어쩌다가 보니 Zabbix 2.2 로 설치를 진행하였다.(의도한 것은 아니다;;;;;)


설치 페이지는 잘 나와 있으며 의외로 심플하다.


아래 사이트를 참고하면 정말 쉽게 설치 할 수 있을 것이다.

https://www.zabbix.com/documentation/2.2/manual/installation/install_from_packages


또한 설치 전에 MySQL이 설치되어 있어야 하며, Script 를 제대로 보진 않았지만, MySQL 5버전 이상을 설치가 되어 있어야 한다.

테스트 서버는 3버전이 설치되어 있는데...문법에서 여러에러가 생기는 것을 확인하였다.


한번 3버전에 설치를 다시 진행해 볼 예정이다.


어쨋든 위의 사이트를 참고하는 것이 어떤 블로그를 보는것보다 쉬울것으로 예상된다.

반응형


Zabbix 에 대해 설치해 보았다.

마음 같아서는 개발 서버에(mysql 이 멀티로 엄청 올라가 있기에 테스트가 좋음...) 올리고 싶었지만 안올라가더군...


가장 찾기 힘들다고 생각하는 rpm 호환성에서...


그래서 설치가 제 1차 목적이기에 VM에 설치하여 보았다.


정말 yum으로 설치하니....너무 편했다....소스로 설치하고 싶지만...정보가 부족하기에...ㅠ


여기에 문제가 발생하였다.


Zabbix Server is running 에서 Value 값이 No라고 나온 것을 확인 가능하다


검색해 보니 conf 파일들에 대해서 127.0.0.1 로 변경하라고 해서 해 봤지만, 전혀 해결이 되지 않았다.


혹시 나처럼 문제가 있는 사람들은 conf 파일들을 수정하기 전에 먼저 방화벽 을 확인해 보기 바란다.


vi /etc/sysconfig/iptables


-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 10051 -j ACCEPT


를 우리는 가장 많이 확인한다.


물론 여기에도 추가를 해 놔야 하지만..(난 이미 추가를 해 봤지만 안되었다.)


여기서 우리는 웹페이지를 제공받고 그 해당 웹페이지를 통해서 본다.


즉, 웹페이지 관련 방화벽도 확인해 봐야 한다!


vi /etc/sysconfig/ip6tables


-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 10051 -j ACCEPT


service ip6tables restart


를 한 후 확인하면 어느새 아래와 같이 Yes 가 된 것을 확인 할 수 있다.



이제 이것저것 확인해 봐야겠다.

반응형

+ Recent posts