![Prometheus 및 노드 내보내기를 위한 시스템 서비스 생성](https://linux55.com/image/104323/Prometheus%20%EB%B0%8F%20%EB%85%B8%EB%93%9C%20%EB%82%B4%EB%B3%B4%EB%82%B4%EA%B8%B0%EB%A5%BC%20%EC%9C%84%ED%95%9C%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%84%9C%EB%B9%84%EC%8A%A4%20%EC%83%9D%EC%84%B1.png)
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'.