HDD의 SMART 정보를 Node_Exporter를 통해 Prometheus로 보내기
13534 단어 SMARTDELLprometheushardware
소개
HDD에는 S.M.A.R.T이라는 자체 진단 기능이 있습니다.
서버에서 사용되는 SAS 형식의 HDD에는 SATA의 HDD로 취득하고 있는 정보 외에 온도 등 더 세세한 정보도 가지고 있습니다.
이번에는 거기에서 온도 값을 얻고 Node_Exporter로 데이터를 얻고 Prometheus와 Grafana에서 그래프를 표시해 보겠습니다.
왜 Node_Exporter?
Prometheus에는 PushGateway 등 편리한 수집 기능도 있습니다만, 이번은 Node_Exporter와 같은 호스트명으로 정렬하고 싶었으므로 Node_Exporter의 추가 정보로서 등록했습니다.
(후의 Grafana의 단에서 호스트가 다르면 귀찮음)
전제
사용 장비
DELL PowerEdge R210II
조금 오래된
smartmontools 설치
#-yオプションは嫌い、ちゃんと依存関係とか見て使いたい・・・
sudo yum install smartmontools
ServerAdministrator 설치
DELL 서버는 관리를 위해 ServerAdministrator이라는 도구를 제공합니다.
참고 : Dell OpenManage Server Administrator(OMSA)를 yum에서 설치
※동료의 기사입니다.
후술하는 디스크 ID를 사용하고 싶기 때문에 설치해 둡니다.
그렇다면 디스크 장애 감지에 사용하기 때문에 OS를 넣으면 우선 할 수 있습니다.
디스크 확인
OMSA에서 얻은 디스크 ID를 레이블에 사용하고 싶으므로 확인하십시오.
[m-kikuchi@manage01 ~]$ omreport storage pdisk controller=0
List of Physical Disks on Controller PERC H200 Adapter (Slot 1)
Controller PERC H200 Adapter (Slot 1)
ID : 0:0 ←ここをラベルで使用するのでメモしておく。
Status : Ok
Name : Physical Disk 0:0
State : Online
Power Status : Not Applicable
Device Name : Not Available
Bus Protocol : SAS ←SATAだと温度は取れない。
Media : HDD
・
・
・
덧붙여서 디스크 고장등으로 서포트에 연락하는 경우는 이 ID를 전하면 빠릅니다.
Node_Exporter 준비
아래 폴더의 데이터를 수집하도록 시작 옵션으로 설정합니다.
#ここが欲しい
/opt/prometheus/collector/
#起動オプション
./node_exporter --collector.textfile.directory=/opt/prometheus/collector
Prometheus와 Grafana
이쪽은 데이터 소스의 등록이 적절하게 되어 있는 것을 전제로! (던지기)
명령 테스트
OS의 버전이나 RAID 컨트롤러의 종류로 커맨드가 바뀌므로 지나가는 커맨드를 찾는다
#CentOS7や、PERC系はだいたいこっち、sdaやsdbを指定するがどっちでも良かったりダメだったり
#コントローラー依存がありそう、両方で拾えた場合はディスク番号はどちらも共通
#-d megaraid,0 /dev/sda と-d megaraid,0 /dev/sdbは同じディスクの情報が帰ってくる
sudo /usr/sbin/smartctl -a -d megaraid,0 /dev/sda
#CenOS6や、ソフトウェアRAIDだとこっち
sudo /usr/sbin/smartctl -a /dev/sg1
돌아오는 결과는 같지만, sg[1-9]는 RAID 볼륨이거나 CD-ROM 드라이브이기 때문에 확실히 확인하는 것
명령 결과는 다음과 같습니다.
$ sudo /usr/sbin/smartctl -a /dev/sg1
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-2.6.32-358.18.1.el6.x86_64] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
Vendor: SEAGATE
Product: ST3600057SS
Revision: ES66
User Capacity: 600,127,266,816 bytes [600 GB]
Logical block size: 512 bytes
Logical Unit id: 0x5000c50068e5c963
Serial number: 6SL6R42F
Device type: disk
Transport protocol: SAS
Local Time is: Tue Jun 27 16:51:20 2017 JST
Device supports SMART and is Enabled
Temperature Warning Disabled or Not Supported
SMART Health Status: OK
Current Drive Temperature: 35 C ←今回はここがほしい
Drive Trip Temperature: 68 C
・
・
・
명령
Prometheus는 다음 형식으로 데이터를 수집합니다.
smartctl에서 나온 값에서 해당 부분을 빼내고 sed로 노력하는 사람
項目名{ラベル名1="文字列",ラベル名2="文字列"} 値
원라이너로 열심히
#/dev/sdaからひろう場合
/usr/sbin/smartctl -a -d megaraid,0 /dev/sda |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1:0",mount="\/dev\/sda"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a -d megaraid,1 /dev/sda |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1:1",mount="\/dev\/sda"} /g' >>/opt/prometheus/collector/hdd_temp.prom
#/dev/sg1からひろう場合
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a /dev/sg2 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1",mount="\/dev\/sg2"} /g' >>/opt/prometheus/collector/hdd_temp.prom
하는 일
#対象ドライブの温度の行を取得
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature' |
#温度の値だけ欲しいのでそれ以外を消す
sed 's/^Current Drive Temperature://g'|
sed 's/[ |:|C]//g'|
#Prometheusで使用する名前とラベルを行頭に差し込む、DiskIDに最初に調べたドライブのID、mountに取得したポイントを記録した
sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g'
#ファイルに書き込む(1行目はファイルを作り直すので>で送る)
>/opt/prometheus/collector/hdd_temp.prom
#2行目以降は追記なので>>で送る
>>/opt/prometheus/collector/hdd_temp.prom
설정
데이터 수집을위한 스크립트로 유지
get_omreport.sh#HDDの温度
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a /dev/sg2 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1",mount="\/dev\/sg2"} /g' >>/opt/prometheus/collector/hdd_temp.prom
추가하면 수동으로 실행해보고 값을 확인한다.
$ cat /opt/prometheus/collector/hdd_temp.prom
HDD_Temperature{DiskID="0:0",mount="/dev/sg1"} 36
HDD_Temperature{DiskID="0:1",mount="/dev/sg2"} 43
Node_Exporter로 읽을 수 있는 형식으로 출력되면 OK
가능하면 crontab에 등록해 둔다, 5분 두어도 갱신해 두면 좋을까.
확인
curl을 사용하여 metrics에 액세스하고 해당 행이 있으면 OK
Node_Exporter는 불려 갔을 때 각 파라미터를 읽어들이기 때문에, 소정의 위치에 소정의 파일이 있으면 자동으로 반영된다.
$ curl http://localhost:9100/metrics |grep HDD
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0# HELP HDD_Temperature Metric read from /opt/prometheus/collector/hdd_temp.prom
# TYPE HDD_Temperature untyped
HDD_Temperature{DiskID="0:0",mount="/dev/sg1"} 36
HDD_Temperature{DiskID="0:1",mount="/dev/sg2"} 43
100 85996 100 85996 0 0 1594k 0 --:--:-- --:--:-- --:--:-- 1646k
마찬가지로 Prometheus도 값이 늘어나면 자동으로 등록하므로 그대로 반영된다.
Grafana 님의 노력
대시보드를 만들고 그처럼 보이도록
요약
이 기사는 SMART 정보를 커맨드 라인에서 반전하고 Prometheus에서 읽을 수 있도록 성형하여 미리 설정한 Node_Exporter의 수집 장소에 두어 값을 수집하도록 하고 있습니다.
별도로 SMART라도 뭐든 좋다는 이야기였습니다.
덤
위쪽으로 OMSA에 접하고 있으므로, 응용으로 이런 것도 가능합니다.
#物理ディスクの正常な数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Status | grep Ok | wc -l |sed 's/^/OmReport_PDisk_Status /g' >/opt/prometheus/collector/pdisk.prom
#物理ディスクの数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Media | wc -l |sed 's/^/OmReport_PDisk_Num /g' >/opt/prometheus/collector/pdisk_num.prom
Status가 OK인 스토리지의 수와 인식하고 있는 수를 출력해 두고, 이하의 경고 룰로 디스크 장해를 검지하는 것 같습니다. (오히려 여기 기사를 걸고)
prometheus1계ALERT Local_HDDFAILD
IF OmReport_PDisk_Status < OmReport_PDisk_Num
FOR 1m
LABELS {severity="High"}
ANNOTATIONS {description="{{ $labels.instance }} がHDD壊れたみたいですよ", summary="Instance {{ $labels.instance }} HDD-Failed"}
prometheus2계 - alert: Local_HDDFAILD
expr: OmReport_PDisk_Status < OmReport_PDisk_Num
for: 1m
labels:
severity: High
annotations:
description: '{{ $labels.instance }} がHDD壊れたみたいですよ'
summary: Instance {{ $labels.instance }} HDD-Failed
Reference
이 문제에 관하여(HDD의 SMART 정보를 Node_Exporter를 통해 Prometheus로 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m-kikuchi2/items/2861e33a221235aa687a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
사용 장비
DELL PowerEdge R210II
조금 오래된
smartmontools 설치
#-yオプションは嫌い、ちゃんと依存関係とか見て使いたい・・・
sudo yum install smartmontools
ServerAdministrator 설치
DELL 서버는 관리를 위해 ServerAdministrator이라는 도구를 제공합니다.
참고 : Dell OpenManage Server Administrator(OMSA)를 yum에서 설치
※동료의 기사입니다.
후술하는 디스크 ID를 사용하고 싶기 때문에 설치해 둡니다.
그렇다면 디스크 장애 감지에 사용하기 때문에 OS를 넣으면 우선 할 수 있습니다.
디스크 확인
OMSA에서 얻은 디스크 ID를 레이블에 사용하고 싶으므로 확인하십시오.
[m-kikuchi@manage01 ~]$ omreport storage pdisk controller=0
List of Physical Disks on Controller PERC H200 Adapter (Slot 1)
Controller PERC H200 Adapter (Slot 1)
ID : 0:0 ←ここをラベルで使用するのでメモしておく。
Status : Ok
Name : Physical Disk 0:0
State : Online
Power Status : Not Applicable
Device Name : Not Available
Bus Protocol : SAS ←SATAだと温度は取れない。
Media : HDD
・
・
・
덧붙여서 디스크 고장등으로 서포트에 연락하는 경우는 이 ID를 전하면 빠릅니다.
Node_Exporter 준비
아래 폴더의 데이터를 수집하도록 시작 옵션으로 설정합니다.
#ここが欲しい
/opt/prometheus/collector/
#起動オプション
./node_exporter --collector.textfile.directory=/opt/prometheus/collector
Prometheus와 Grafana
이쪽은 데이터 소스의 등록이 적절하게 되어 있는 것을 전제로! (던지기)
명령 테스트
OS의 버전이나 RAID 컨트롤러의 종류로 커맨드가 바뀌므로 지나가는 커맨드를 찾는다
#CentOS7や、PERC系はだいたいこっち、sdaやsdbを指定するがどっちでも良かったりダメだったり
#コントローラー依存がありそう、両方で拾えた場合はディスク番号はどちらも共通
#-d megaraid,0 /dev/sda と-d megaraid,0 /dev/sdbは同じディスクの情報が帰ってくる
sudo /usr/sbin/smartctl -a -d megaraid,0 /dev/sda
#CenOS6や、ソフトウェアRAIDだとこっち
sudo /usr/sbin/smartctl -a /dev/sg1
돌아오는 결과는 같지만, sg[1-9]는 RAID 볼륨이거나 CD-ROM 드라이브이기 때문에 확실히 확인하는 것
명령 결과는 다음과 같습니다.
$ sudo /usr/sbin/smartctl -a /dev/sg1
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-2.6.32-358.18.1.el6.x86_64] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
Vendor: SEAGATE
Product: ST3600057SS
Revision: ES66
User Capacity: 600,127,266,816 bytes [600 GB]
Logical block size: 512 bytes
Logical Unit id: 0x5000c50068e5c963
Serial number: 6SL6R42F
Device type: disk
Transport protocol: SAS
Local Time is: Tue Jun 27 16:51:20 2017 JST
Device supports SMART and is Enabled
Temperature Warning Disabled or Not Supported
SMART Health Status: OK
Current Drive Temperature: 35 C ←今回はここがほしい
Drive Trip Temperature: 68 C
・
・
・
명령
Prometheus는 다음 형식으로 데이터를 수집합니다.
smartctl에서 나온 값에서 해당 부분을 빼내고 sed로 노력하는 사람
項目名{ラベル名1="文字列",ラベル名2="文字列"} 値
원라이너로 열심히
#/dev/sdaからひろう場合
/usr/sbin/smartctl -a -d megaraid,0 /dev/sda |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1:0",mount="\/dev\/sda"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a -d megaraid,1 /dev/sda |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1:1",mount="\/dev\/sda"} /g' >>/opt/prometheus/collector/hdd_temp.prom
#/dev/sg1からひろう場合
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a /dev/sg2 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1",mount="\/dev\/sg2"} /g' >>/opt/prometheus/collector/hdd_temp.prom
하는 일
#対象ドライブの温度の行を取得
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature' |
#温度の値だけ欲しいのでそれ以外を消す
sed 's/^Current Drive Temperature://g'|
sed 's/[ |:|C]//g'|
#Prometheusで使用する名前とラベルを行頭に差し込む、DiskIDに最初に調べたドライブのID、mountに取得したポイントを記録した
sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g'
#ファイルに書き込む(1行目はファイルを作り直すので>で送る)
>/opt/prometheus/collector/hdd_temp.prom
#2行目以降は追記なので>>で送る
>>/opt/prometheus/collector/hdd_temp.prom
설정
데이터 수집을위한 스크립트로 유지
get_omreport.sh#HDDの温度
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a /dev/sg2 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1",mount="\/dev\/sg2"} /g' >>/opt/prometheus/collector/hdd_temp.prom
추가하면 수동으로 실행해보고 값을 확인한다.
$ cat /opt/prometheus/collector/hdd_temp.prom
HDD_Temperature{DiskID="0:0",mount="/dev/sg1"} 36
HDD_Temperature{DiskID="0:1",mount="/dev/sg2"} 43
Node_Exporter로 읽을 수 있는 형식으로 출력되면 OK
가능하면 crontab에 등록해 둔다, 5분 두어도 갱신해 두면 좋을까.
확인
curl을 사용하여 metrics에 액세스하고 해당 행이 있으면 OK
Node_Exporter는 불려 갔을 때 각 파라미터를 읽어들이기 때문에, 소정의 위치에 소정의 파일이 있으면 자동으로 반영된다.
$ curl http://localhost:9100/metrics |grep HDD
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0# HELP HDD_Temperature Metric read from /opt/prometheus/collector/hdd_temp.prom
# TYPE HDD_Temperature untyped
HDD_Temperature{DiskID="0:0",mount="/dev/sg1"} 36
HDD_Temperature{DiskID="0:1",mount="/dev/sg2"} 43
100 85996 100 85996 0 0 1594k 0 --:--:-- --:--:-- --:--:-- 1646k
마찬가지로 Prometheus도 값이 늘어나면 자동으로 등록하므로 그대로 반영된다.
Grafana 님의 노력
대시보드를 만들고 그처럼 보이도록
요약
이 기사는 SMART 정보를 커맨드 라인에서 반전하고 Prometheus에서 읽을 수 있도록 성형하여 미리 설정한 Node_Exporter의 수집 장소에 두어 값을 수집하도록 하고 있습니다.
별도로 SMART라도 뭐든 좋다는 이야기였습니다.
덤
위쪽으로 OMSA에 접하고 있으므로, 응용으로 이런 것도 가능합니다.
#物理ディスクの正常な数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Status | grep Ok | wc -l |sed 's/^/OmReport_PDisk_Status /g' >/opt/prometheus/collector/pdisk.prom
#物理ディスクの数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Media | wc -l |sed 's/^/OmReport_PDisk_Num /g' >/opt/prometheus/collector/pdisk_num.prom
Status가 OK인 스토리지의 수와 인식하고 있는 수를 출력해 두고, 이하의 경고 룰로 디스크 장해를 검지하는 것 같습니다. (오히려 여기 기사를 걸고)
prometheus1계ALERT Local_HDDFAILD
IF OmReport_PDisk_Status < OmReport_PDisk_Num
FOR 1m
LABELS {severity="High"}
ANNOTATIONS {description="{{ $labels.instance }} がHDD壊れたみたいですよ", summary="Instance {{ $labels.instance }} HDD-Failed"}
prometheus2계 - alert: Local_HDDFAILD
expr: OmReport_PDisk_Status < OmReport_PDisk_Num
for: 1m
labels:
severity: High
annotations:
description: '{{ $labels.instance }} がHDD壊れたみたいですよ'
summary: Instance {{ $labels.instance }} HDD-Failed
Reference
이 문제에 관하여(HDD의 SMART 정보를 Node_Exporter를 통해 Prometheus로 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m-kikuchi2/items/2861e33a221235aa687a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#CentOS7や、PERC系はだいたいこっち、sdaやsdbを指定するがどっちでも良かったりダメだったり
#コントローラー依存がありそう、両方で拾えた場合はディスク番号はどちらも共通
#-d megaraid,0 /dev/sda と-d megaraid,0 /dev/sdbは同じディスクの情報が帰ってくる
sudo /usr/sbin/smartctl -a -d megaraid,0 /dev/sda
#CenOS6や、ソフトウェアRAIDだとこっち
sudo /usr/sbin/smartctl -a /dev/sg1
$ sudo /usr/sbin/smartctl -a /dev/sg1
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-2.6.32-358.18.1.el6.x86_64] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
Vendor: SEAGATE
Product: ST3600057SS
Revision: ES66
User Capacity: 600,127,266,816 bytes [600 GB]
Logical block size: 512 bytes
Logical Unit id: 0x5000c50068e5c963
Serial number: 6SL6R42F
Device type: disk
Transport protocol: SAS
Local Time is: Tue Jun 27 16:51:20 2017 JST
Device supports SMART and is Enabled
Temperature Warning Disabled or Not Supported
SMART Health Status: OK
Current Drive Temperature: 35 C ←今回はここがほしい
Drive Trip Temperature: 68 C
・
・
・
Prometheus는 다음 형식으로 데이터를 수집합니다.
smartctl에서 나온 값에서 해당 부분을 빼내고 sed로 노력하는 사람
項目名{ラベル名1="文字列",ラベル名2="文字列"} 値
원라이너로 열심히
#/dev/sdaからひろう場合
/usr/sbin/smartctl -a -d megaraid,0 /dev/sda |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1:0",mount="\/dev\/sda"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a -d megaraid,1 /dev/sda |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1:1",mount="\/dev\/sda"} /g' >>/opt/prometheus/collector/hdd_temp.prom
#/dev/sg1からひろう場合
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a /dev/sg2 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1",mount="\/dev\/sg2"} /g' >>/opt/prometheus/collector/hdd_temp.prom
하는 일
#対象ドライブの温度の行を取得
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature' |
#温度の値だけ欲しいのでそれ以外を消す
sed 's/^Current Drive Temperature://g'|
sed 's/[ |:|C]//g'|
#Prometheusで使用する名前とラベルを行頭に差し込む、DiskIDに最初に調べたドライブのID、mountに取得したポイントを記録した
sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g'
#ファイルに書き込む(1行目はファイルを作り直すので>で送る)
>/opt/prometheus/collector/hdd_temp.prom
#2行目以降は追記なので>>で送る
>>/opt/prometheus/collector/hdd_temp.prom
설정
데이터 수집을위한 스크립트로 유지
get_omreport.sh#HDDの温度
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a /dev/sg2 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1",mount="\/dev\/sg2"} /g' >>/opt/prometheus/collector/hdd_temp.prom
추가하면 수동으로 실행해보고 값을 확인한다.
$ cat /opt/prometheus/collector/hdd_temp.prom
HDD_Temperature{DiskID="0:0",mount="/dev/sg1"} 36
HDD_Temperature{DiskID="0:1",mount="/dev/sg2"} 43
Node_Exporter로 읽을 수 있는 형식으로 출력되면 OK
가능하면 crontab에 등록해 둔다, 5분 두어도 갱신해 두면 좋을까.
확인
curl을 사용하여 metrics에 액세스하고 해당 행이 있으면 OK
Node_Exporter는 불려 갔을 때 각 파라미터를 읽어들이기 때문에, 소정의 위치에 소정의 파일이 있으면 자동으로 반영된다.
$ curl http://localhost:9100/metrics |grep HDD
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0# HELP HDD_Temperature Metric read from /opt/prometheus/collector/hdd_temp.prom
# TYPE HDD_Temperature untyped
HDD_Temperature{DiskID="0:0",mount="/dev/sg1"} 36
HDD_Temperature{DiskID="0:1",mount="/dev/sg2"} 43
100 85996 100 85996 0 0 1594k 0 --:--:-- --:--:-- --:--:-- 1646k
마찬가지로 Prometheus도 값이 늘어나면 자동으로 등록하므로 그대로 반영된다.
Grafana 님의 노력
대시보드를 만들고 그처럼 보이도록
요약
이 기사는 SMART 정보를 커맨드 라인에서 반전하고 Prometheus에서 읽을 수 있도록 성형하여 미리 설정한 Node_Exporter의 수집 장소에 두어 값을 수집하도록 하고 있습니다.
별도로 SMART라도 뭐든 좋다는 이야기였습니다.
덤
위쪽으로 OMSA에 접하고 있으므로, 응용으로 이런 것도 가능합니다.
#物理ディスクの正常な数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Status | grep Ok | wc -l |sed 's/^/OmReport_PDisk_Status /g' >/opt/prometheus/collector/pdisk.prom
#物理ディスクの数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Media | wc -l |sed 's/^/OmReport_PDisk_Num /g' >/opt/prometheus/collector/pdisk_num.prom
Status가 OK인 스토리지의 수와 인식하고 있는 수를 출력해 두고, 이하의 경고 룰로 디스크 장해를 검지하는 것 같습니다. (오히려 여기 기사를 걸고)
prometheus1계ALERT Local_HDDFAILD
IF OmReport_PDisk_Status < OmReport_PDisk_Num
FOR 1m
LABELS {severity="High"}
ANNOTATIONS {description="{{ $labels.instance }} がHDD壊れたみたいですよ", summary="Instance {{ $labels.instance }} HDD-Failed"}
prometheus2계 - alert: Local_HDDFAILD
expr: OmReport_PDisk_Status < OmReport_PDisk_Num
for: 1m
labels:
severity: High
annotations:
description: '{{ $labels.instance }} がHDD壊れたみたいですよ'
summary: Instance {{ $labels.instance }} HDD-Failed
Reference
이 문제에 관하여(HDD의 SMART 정보를 Node_Exporter를 통해 Prometheus로 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m-kikuchi2/items/2861e33a221235aa687a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#HDDの温度
/usr/sbin/smartctl -a /dev/sg1 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:0",mount="\/dev\/sg1"} /g' >/opt/prometheus/collector/hdd_temp.prom
/usr/sbin/smartctl -a /dev/sg2 |grep 'Current Drive Temperature'|sed 's/^Current Drive Temperature://g'|sed 's/[ |:|C]//g'|sed 's/^/HDD_Temperature{DiskID="0:1",mount="\/dev\/sg2"} /g' >>/opt/prometheus/collector/hdd_temp.prom
$ cat /opt/prometheus/collector/hdd_temp.prom
HDD_Temperature{DiskID="0:0",mount="/dev/sg1"} 36
HDD_Temperature{DiskID="0:1",mount="/dev/sg2"} 43
curl을 사용하여 metrics에 액세스하고 해당 행이 있으면 OK
Node_Exporter는 불려 갔을 때 각 파라미터를 읽어들이기 때문에, 소정의 위치에 소정의 파일이 있으면 자동으로 반영된다.
$ curl http://localhost:9100/metrics |grep HDD
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0# HELP HDD_Temperature Metric read from /opt/prometheus/collector/hdd_temp.prom
# TYPE HDD_Temperature untyped
HDD_Temperature{DiskID="0:0",mount="/dev/sg1"} 36
HDD_Temperature{DiskID="0:1",mount="/dev/sg2"} 43
100 85996 100 85996 0 0 1594k 0 --:--:-- --:--:-- --:--:-- 1646k
마찬가지로 Prometheus도 값이 늘어나면 자동으로 등록하므로 그대로 반영된다.
Grafana 님의 노력
대시보드를 만들고 그처럼 보이도록
요약
이 기사는 SMART 정보를 커맨드 라인에서 반전하고 Prometheus에서 읽을 수 있도록 성형하여 미리 설정한 Node_Exporter의 수집 장소에 두어 값을 수집하도록 하고 있습니다.
별도로 SMART라도 뭐든 좋다는 이야기였습니다.
덤
위쪽으로 OMSA에 접하고 있으므로, 응용으로 이런 것도 가능합니다.
#物理ディスクの正常な数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Status | grep Ok | wc -l |sed 's/^/OmReport_PDisk_Status /g' >/opt/prometheus/collector/pdisk.prom
#物理ディスクの数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Media | wc -l |sed 's/^/OmReport_PDisk_Num /g' >/opt/prometheus/collector/pdisk_num.prom
Status가 OK인 스토리지의 수와 인식하고 있는 수를 출력해 두고, 이하의 경고 룰로 디스크 장해를 검지하는 것 같습니다. (오히려 여기 기사를 걸고)
prometheus1계ALERT Local_HDDFAILD
IF OmReport_PDisk_Status < OmReport_PDisk_Num
FOR 1m
LABELS {severity="High"}
ANNOTATIONS {description="{{ $labels.instance }} がHDD壊れたみたいですよ", summary="Instance {{ $labels.instance }} HDD-Failed"}
prometheus2계 - alert: Local_HDDFAILD
expr: OmReport_PDisk_Status < OmReport_PDisk_Num
for: 1m
labels:
severity: High
annotations:
description: '{{ $labels.instance }} がHDD壊れたみたいですよ'
summary: Instance {{ $labels.instance }} HDD-Failed
Reference
이 문제에 관하여(HDD의 SMART 정보를 Node_Exporter를 통해 Prometheus로 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m-kikuchi2/items/2861e33a221235aa687a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 기사는 SMART 정보를 커맨드 라인에서 반전하고 Prometheus에서 읽을 수 있도록 성형하여 미리 설정한 Node_Exporter의 수집 장소에 두어 값을 수집하도록 하고 있습니다.
별도로 SMART라도 뭐든 좋다는 이야기였습니다.
덤
위쪽으로 OMSA에 접하고 있으므로, 응용으로 이런 것도 가능합니다.
#物理ディスクの正常な数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Status | grep Ok | wc -l |sed 's/^/OmReport_PDisk_Status /g' >/opt/prometheus/collector/pdisk.prom
#物理ディスクの数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Media | wc -l |sed 's/^/OmReport_PDisk_Num /g' >/opt/prometheus/collector/pdisk_num.prom
Status가 OK인 스토리지의 수와 인식하고 있는 수를 출력해 두고, 이하의 경고 룰로 디스크 장해를 검지하는 것 같습니다. (오히려 여기 기사를 걸고)
prometheus1계ALERT Local_HDDFAILD
IF OmReport_PDisk_Status < OmReport_PDisk_Num
FOR 1m
LABELS {severity="High"}
ANNOTATIONS {description="{{ $labels.instance }} がHDD壊れたみたいですよ", summary="Instance {{ $labels.instance }} HDD-Failed"}
prometheus2계 - alert: Local_HDDFAILD
expr: OmReport_PDisk_Status < OmReport_PDisk_Num
for: 1m
labels:
severity: High
annotations:
description: '{{ $labels.instance }} がHDD壊れたみたいですよ'
summary: Instance {{ $labels.instance }} HDD-Failed
Reference
이 문제에 관하여(HDD의 SMART 정보를 Node_Exporter를 통해 Prometheus로 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/m-kikuchi2/items/2861e33a221235aa687a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#物理ディスクの正常な数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Status | grep Ok | wc -l |sed 's/^/OmReport_PDisk_Status /g' >/opt/prometheus/collector/pdisk.prom
#物理ディスクの数を数えて出力
/opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | grep Media | wc -l |sed 's/^/OmReport_PDisk_Num /g' >/opt/prometheus/collector/pdisk_num.prom
ALERT Local_HDDFAILD
IF OmReport_PDisk_Status < OmReport_PDisk_Num
FOR 1m
LABELS {severity="High"}
ANNOTATIONS {description="{{ $labels.instance }} がHDD壊れたみたいですよ", summary="Instance {{ $labels.instance }} HDD-Failed"}
- alert: Local_HDDFAILD
expr: OmReport_PDisk_Status < OmReport_PDisk_Num
for: 1m
labels:
severity: High
annotations:
description: '{{ $labels.instance }} がHDD壊れたみたいですよ'
summary: Instance {{ $labels.instance }} HDD-Failed
Reference
이 문제에 관하여(HDD의 SMART 정보를 Node_Exporter를 통해 Prometheus로 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/m-kikuchi2/items/2861e33a221235aa687a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)