collectd 설치
| 코드 블럭 |
|---|
|
sudo dnf -y install collectd collectd-utils collectd-ipmi |
collectd-ipmi.te
collectd-ipmi.pp
| 코드 블럭 |
|---|
semodule -i collectd-ipmi.pp |
| 코드 블럭 |
|---|
journalctl -xe
sealert -l xxxx |
| 코드 블럭 |
|---|
cat /var/log/audit/audit.log | audit2allow -M collectd-ipmi |
te → mod → pp
https://relativkreativ.at/articles/how-to-compile-a-selinux-policy-package
ipmi 장치 그룹 사용 권한 변경
ipmi 장치는 root 계정만 이용할 수 있다.
collectd 에서 전원 정보를 읽어오려면, 특별한 스크립트가 필요하기 때문에, collectd 그룹을 만들고 이 그룹에서 사용할 수 있도록 설정한다.
collectd 그룹을 생성한다
| 코드 블럭 |
|---|
|
sudo groupadd collectd |
udev 파일을 생성한다
| 코드 블럭 |
|---|
|
code | | title | /lib/udev/rules.d/52-collectd-ipmi.rules |
|---|
|
KERNEL=="ipmi*", MODE="660", GROUP="collectd" |
재부팅한다. 재부팅 없이 넘어가려면, 다음 명령어를 입력한다.
| 코드 블럭 |
|---|
|
sudo chmod 660 /dev/ipmi*
sudo chown root:collectd /dev/ipmi* |
사용권한이 변경되어 있는 것을 확인한다
| 코드 블럭 |
|---|
|
# ls -alRZ /dev/ipmi*
crw-rw----. 1 root collectd system_u:object_r:ipmi_device_t:s0 /dev/ipmi0 |
https://github.com/influxdata/telegraf/issues/3332
...
보안 컨텍스트 적용
selinux 는 collectd 가 /dev/ipmi 장치에 접근하는 것을 막는다.
policy package ( collectd-ipmi.te , collectd-ipmi.pp ) 파일을 업로드 한 후, 다음 명령어를 입력하여 보안컨텍스트를 적용한다.
| 코드 블럭 |
|---|
|
sudo semodule -i collectd-ipmi.pp |
순간 소비전력 확인 스크립트 업로드
collectd-power 스크립트를 업로드 후 실행권한을 주고 root 계정에서 실행하여 동작함을 확인한다.
IPMI / DCMI 를 통해 소비전력을 읽어들이는 기능이 없는 경우 이용할 수 없다.
| 코드 블럭 |
|---|
| language | bash |
|---|
| theme | Emacs |
|---|
| title | /etc/ipmicollectd-power |
|---|
|
#!/bin/bash
HOSTNAME="${COLLECTD_HOSTNAME:-localhost}"
INTERVAL="${COLLECTD_INTERVAL:-510}"
while sleep "$INTERVAL"; do
VALUE=$( /usr/bin/ipmitool dcmi power reading 2>&1 | grep -i instantaneous | sed -e 's/[^0-9]//g' )
#echo "PUTVAL \"$HOSTNAME/grep_log/gauge-stuff\" interval=$INTERVAL N:$VALUE"
echo "PUTVAL \"$HOSTNAME/dcmiipmi/power-Instantaneous Power\" interval=$INTERVAL N:$VALUE"
done |
https://collectd.org/wiki/index.php/Plugin:Exec
https://github.com/jabl/collectd-plugin-dcmi
https://collectd.org/wiki/index.php/Plugin:IPMI
https://ibigbug.online/dell-r720-poweredge-server-hardware-monitoring
https://www.elastic.co/guide/en/logstash/current/plugins-codecs-collectd.html
...
| 코드 블럭 |
|---|
|
# chmod 755 /etc/collectd-power
# sudo /etc/collectd-power
PUTVAL "localhost/ipmi/power-Instantaneous Power" interval=10 N:199
PUTVAL "localhost/ipmi/power-Instantaneous Power" interval=10 N:200 |
collectd 설정 파일 적용
/etc/collectd.d/*.conf 파일을 추가한다.
| 코드 블럭 |
|---|
| theme | Emacs |
|---|
| title | /etc/collectd.conf |
|---|
|
Include "/etc/collectd.d/*.conf" |
10초 주기로 측정하도록 설정되었다
| 코드 블럭 |
|---|
| theme | Emacs |
|---|
| title | /etc/collectd.d/interval.conf |
|---|
|
Interval 10 |
특정 센서만 측정하려면 Sensor 이름을 지정해준다.
특정 센서만 제외하려면, Sensor 이름을 지정해 주고, IgnoreSelected true 를 한다.
전부다 측정하려면 Sensor 이름을 지정하지 않는다.
| 코드 블럭 |
|---|
| theme | Emacs |
|---|
| title | /etc/collectd.d/ipmi-sensors.conf |
|---|
|
LoadPlugin ipmi
<Plugin ipmi>
<Instance "local">
#Sensor "FAN1"
#Sensor "FAN2"
IgnoreSelected false
NotifySensorAdd false
NotifySensorRemove true
NotifySensorNotPresent false
NotifyIPMIConnectionState false
SELEnabled false
SELClearEvent false
</Instance>
</Plugin> |
| 코드 블럭 |
|---|
| theme | Emacs |
|---|
| title | /etc/collectd.d/ipmi-power.conf |
|---|
|
LoadPlugin exec
<Plugin exec>
Exec "nobody:collectd" "/etc/collectd-power"
</Plugin> |
원격지의 logstash 서버의 IP와 포트를 입력한다.
| 코드 블럭 |
|---|
| theme | Emacs |
|---|
| title | /etc/collectd.d/remote.conf |
|---|
|
LoadPlugin network
<Plugin network>
Server "192.168.0.100" "25826"
</Plugin> |
hostname 에 자산번호를 함께 기입하면 로그를 분석할 때 유용하다.
| 코드 블럭 |
|---|
| theme | Emacs |
|---|
| title | /etc/collectd.d/hostname.conf |
|---|
|
Hostname "2020000614:vmhost01" |
collectdctl 프로그램을 사용할 수 있도록 설정한다. collectdctl 는 collectd 동작유무를 확인할 수 있는 프로그램이다.
| 코드 블럭 |
|---|
| theme | Emacs |
|---|
| title | /etc/collectd.d/unixsock.conf |
|---|
|
LoadPlugin unixsock
<Plugin unixsock>
SocketFile "/var/run/collectd-unixsock"
SocketGroup "collectd"
SocketPerms "0660"
DeleteSocket false
</Plugin> |
collectd 재시작
| 코드 블럭 |
|---|
|
sudo systemctl enable collectd.service
sudo systemctl start collectd.service |
collectd 를 통해 수집되는 정보 확인
하기와 같은 정보들이 수집되어 remote.conf 에 기술된 서버에 전송된다.
| 코드 블럭 |
|---|
|
# sudo collectdctl listval
2020000614:vmhost01/load/load
2020000614:vmhost01/memory/memory-buffered
2020000614:vmhost01/memory/memory-cached
2020000614:vmhost01/memory/memory-free
2020000614:vmhost01/memory/memory-slab_recl
2020000614:vmhost01/memory/memory-slab_unrecl
2020000614:vmhost01/memory/memory-used
2020000614:vmhost01/ipmi/fanspeed-FAN1 fan_cooling (29.1)
2020000614:vmhost01/ipmi/fanspeed-FAN2 fan_cooling (29.2)
2020000614:vmhost01/ipmi/fanspeed-FAN3 fan_cooling (29.3)
2020000614:vmhost01/ipmi/fanspeed-FAN4 fan_cooling (29.4)
2020000614:vmhost01/ipmi/power-Instantaneous Power
2020000614:vmhost01/ipmi/temperature-CPU Temp processor (3.1)
... |