Prometheus 및 노드 내보내기를 위한 시스템 서비스 생성

Prometheus 및 노드 내보내기를 위한 시스템 서비스 생성

Prometheus 및 Node Importer용 서비스를 만들려고 합니다.

두 .service 파일의 내용은 거의 동일합니다.

    #!/bin/sh -
    # /etc/systemd/system/node_exporter.service
    [Unit]
    Description=Node Exporter

    [Service]
    User=prometheus
    RemainAfterExit=true
    ExecStart=/usr/bin/node_exporter

내 문제는 서비스를 시작할 수 없다는 것입니다. 다음 오류가 발생합니다.

    ● node_exporter.service - Node Exporter
Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: enabled)
Active: active (exited) (Result: exit-code) since Mon 2017-01-30 16:00:31 MST; 7min ago
Process: 18693 ExecStart=/usr/bin/node_exporter (code=exited, status=203/EXEC)
Main PID: 18693 (code=exited, status=203/EXEC)

사용자를 변경하고 경로가 올바른지 확인하는 등 여러 가지 반복을 시도했습니다. 몇 시간 동안 조정하고, 인터넷 검색하고, 역추적한 후에는 평생 동안 제대로 작동할 수 없습니다. Upstart에 대한 가이드가 있지만 Upstart를 종속성으로 사용하지 않고 16.04에서 작동하려면 이 가이드가 필요합니다.

답변1

이렇게 문제를 해결했는데..

노드 내보내기:

ExecStart=/bin/sh -c '/usr/local/bin/node_exporter'

MySQL_수출자:

=/bin/sh -c '/usr/local/bin/mysqld_exporter \
 --config.my-cnf /etc/.mysqld_exporter.cnf \
 --collect.global_status \
 --collect.info_schema.innodb_metrics \
 --collect.auto_increment.columns \
 --collect.info_schema.processlist \
 --collect.binlog_size \
 --collect.info_schema.tablestats \
 --collect.global_variables \
 --collect.info_schema.query_response_time \
 --collect.info_schema.userstats \
 --collect.info_schema.tables \
 --collect.perf_schema.tablelocks \
 --collect.perf_schema.file_events \
 --collect.perf_schema.eventswaits \
 --collect.perf_schema.indexiowaits \
 --collect.perf_schema.tableiowaits \
 --collect.slave_status \
 --web.listen-address=0.0.0.0:9104'

전체 명령은 다음과 같습니다.

sudo vim /etc/systemd/system/mysql_exporter.service

콘텐츠 mysql_exporter.service:

 [Unit]
 Description=Prometheus MySQL Exporter
 After=network.target

 [Service]
 Type=simple
 Restart=always
 ExecStart=/bin/sh -c '/usr/local/bin/mysqld_exporter \
 --config.my-cnf /etc/.mysqld_exporter.cnf \
 --collect.global_status \
 --collect.info_schema.innodb_metrics \
 --collect.auto_increment.columns \
 --collect.info_schema.processlist \
 --collect.binlog_size \
 --collect.info_schema.tablestats \
 --collect.global_variables \
 --collect.info_schema.query_response_time \
 --collect.info_schema.userstats \
 --collect.info_schema.tables \
 --collect.perf_schema.tablelocks \
 --collect.perf_schema.file_events \
 --collect.perf_schema.eventswaits \
 --collect.perf_schema.indexiowaits \
 --collect.perf_schema.tableiowaits \
 --collect.slave_status \
 --web.listen-address=0.0.0.0:9104'
 
 [Install]
 WantedBy=multi-user.target

노드 내보내기:

sudo vim /etc/systemd/system/node_exporter.service

콘텐츠 node_exporter:

 [Unit]
 Description=Prometheus Node Exporter
 After=network.target
 User=prometheus
 Group=prometheus

 [Service]
 Type=simple
 Restart=always
 ExecStart=/bin/sh -c '/usr/local/bin/node_exporter'

 [Install]
 WantedBy=multi-user.target

답변2

node_exporter 경로가 잘못된 것 같습니다.

    ExecStart=/usr/bin/node_exporter

Ubuntu 16.04에 다른 경로가 있습니다

~# cat /etc/issue
Ubuntu 16.04.3 LTS \n \l

~# which node_exporter
/usr/sbin/node_exporter

이것이 문제의 원인이 아닌 경우 다음 /var/log/syslog과 같이 실패 이유를 표시해야 합니다.

Oct 20 12:30:30 prom systemd[8848]: node_exporter.service: Failed at step EXEC spawning /usr/bin/node_exporter: No such file or directory
Oct 20 12:30:30 prom systemd[1]: node_exporter.service: Main process exited, code=exited, status=203/EXEC
Oct 20 12:30:30 prom systemd[1]: node_exporter.service: Unit entered failed state.
Oct 20 12:30:30 prom systemd[1]: node_exporter.service: Failed with result 'exit-code'.
Oct 20 12:30:30 prom systemd[1]: node_exporter.service: Service hold-off time over, scheduling restart.
Oct 20 12:30:30 prom systemd[1]: Stopped Prometheus exporter for machine metrics, written in Go with pluggable metric collectors..
Oct 20 12:30:30 prom systemd[1]: Started Prometheus exporter for machine metrics, written in Go with pluggable metric collectors..

답변3

전달한 명령을 수동으로 실행하여 ExecStart실행되는지 확인하십시오.

또한 잘못된 플랫폼에 대한 바이너리를 다운로드/사용했기 때문에 203 오류가 발생했습니다. 저는 "Linux" 대신 "Darwin"을 사용합니다.

  Process: 20340 ExecStart=/usr/local/bin/node_exporter (code=exited, status=203/EXEC)

$ ls -lah /usr/local/bin/node_exporter
-rwxr-xr-x 1 node_exporter node_exporter 12M Jan 16 16:36 /usr/local/bin/node_exporter
$ /usr/local/bin/node_exporter
-bash: /usr/local/bin/node_exporter: cannot execute binary file: Exec format error

답변4

이 오류가 발생합니다. @Saex로 해결되었습니다.

이 오류가 발생한 이유는 node_exporter-1.2.2.darwin-amd64.tar.gz대신 잘못된 패키지를 다운로드했기 때문입니다.node_exporter-1.2.2.linux-amd64.tar.gz

    node_exporter.service - Node Exporter
         Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: enabled)
         Active: failed (Result: exit-code) since Wed 2021-08-18 11:22:44 UTC; 17s ago
       Main PID: 3830 (code=exited, status=203/EXEC)

Aug 18 11:22:44 ip-10-0-101-80 systemd[1]: Started Node Exporter.
Aug 18 11:22:44 ip-10-0-101-80 systemd[3830]: node_exporter.service: Failed to execute command: Exec format error
Aug 18 11:22:44 ip-10-0-101-80 systemd[3830]: node_exporter.service: Failed at step EXEC spawning /opt/node_exporter/node_exporter: Exec>
Aug 18 11:22:44 ip-10-0-101-80 systemd[1]: node_exporter.service: Main process exited, code=exited, status=203/EXEC
Aug 18 11:22:44 ip-10-0-101-80 systemd[1]: node_exporter.service: Failed with result 'exit-code'.

관련 정보