방금 haproxy 를 내 테스트 서버입니다.

시스템 로그가 아닌 로컬 파일에 로그를 기록하는 방법이 있습니까?

이것은 테스트 용이므로 열기를 시작하고 싶지 않습니다. 포트 / 모든 테스트 데이터로 syslog를 복잡하게 만듭니다.

안타깝게도 내가 찾을 수있는 유일한 정보는 syslog 서버에 대한 로깅과 관련이 있습니다.

다음을 사용해 보았습니다.

내 구성에서

log /home/user/ha.log local0 

. 하지만 그 결과 :

[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2) 

다시 시작했을 때. 그래서 저는 touch /home/user/ha.log로 파일을 만들고 다시 시작했습니다.

[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111) 

이게 가능합니까? 내 테스트 데이터를 보려면 syslog 등을 구성해야합니까?

댓글

  • 나는 ' HAProxy가 파일에 기록 할 수 있다고 생각하지 않습니다. 그 이유는 디스크 쓰기가 차단 작업이기 때문이라고 생각합니다. syslog를 정말 사용하지 않는 이유는 무엇입니까? 구성이 그렇게 까다로운 것은 아닙니다. HAProxy에 로컬 기능을 할당하고 해당 항목을 다른 파일 (또는 네트워크 스트림)이 아닌 다른 파일에 쓰도록 syslog 데몬을 구성 할 수 있습니다. ' HAProxy 로그가 다른 모든 것과 섞이지 않기를 원합니다.

Answer

Haproxy는 단순히 지원하지 않습니다. 파일에 로깅합니다. 문서 ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log )에 명시된 바와 같이 “log”문은 첫 번째 매개 변수로 해당 “파일”이면 유닉스 소켓이고 HAProxy는이 소켓에 syslog 형식으로 말합니다. Haproxy는 파일 쓰기가 아니라 요청에 대한 책임이 있기 때문에 이와 같이 설계되었으며 로그 파일 쓰기를 syslog에 위임합니다. . 시스템을 엉망으로 만들고 싶지 않다면, 예를 들어 logstash를 설치하고 다음을 실행할 수 있습니다. logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }" 다음을 추가합니다. log /tmp/haprxoy_log.sock In haproxy.cfg를 사용하여 테스트하십시오.

댓글

  • ' " E : logstash 패키지를 찾을 수 없습니다. ". logstash가 우분투에서 제거 되었습니까?
  • @ user568021은 logstash가 우분투에서 제공되지 않는 것처럼 보이지만 탄력적 (logstash '의 유지 관리자)은 적절한 소스를 제공합니다. 또한 logstash는 자바 소프트웨어이므로 JRE (우분투에서 제공)로 실행하는 jar 파일을 다운로드하여 실행할 수 있습니다.

Answer

/etc/rsyslog.d/에서 haproxy 로그 구성 파일을 변경하여 파일이 원하는 경로를 가리 키도록 할 수 있습니다. 다른 배포에 대해서는 확실하지 않습니다. 저는 Debian을 사용하고 있습니다. /etc/rsyslog.d/49-haproxy.conf/var/log/haproxy/haproxy.log,

또한 /etc/logrotate.d/haproxy의 로그 경로를 새 경로로 업데이트해야합니다. 그러면 gzip.

그런 다음 rsyslog.service를 다시 시작합니다.

sudo systemctl restart rsyslog.service 

지금 haproxy.log.* 파일은 /var/log/haproxy/ 디렉토리에 있습니다.

댓글

  • 별도의 원래 haproxy.log에 영향을주지 않고 /var/log/haproxy-errors.log와 같은 오류를 기록 하시겠습니까?

Answer

버전 1.9 HAProxy 지원 이후 stdout 로깅 및 stderr.

이를 염두에두고 파일로 파이프하는 것은 매우 간단합니다.

# change haproxy.cfg file with the following global log stdout local0 debug defaults log global option httplog 

그런 다음 HAProxy를 다음과 같이 간단히 실행할 수 있습니다.

haproxy -f haproxy.cfg > haproxy.log 2>&1 & 

아시겠지만 > 파이프 stdouthaproxy.log 파일로 변환 한 다음 2>&1 파이프 stderr도 같은 파일에 추가합니다. 프로세스를 백그라운드에 배치하는 &로 끝납니다.

더 좋아지고 스크립트를 설정하여

다음과 같이 수행합니다.

#!/bin/bash # mini launcher kill -9 `cat /home/user/haproxy.pid` /home/user/haproxy -f /home/haproxy.cfg > /home/user/haproxy.log 2>&1 & echo $! > /home/user/haproxy.pid 

아마도 알겠지만 … 권장하지 않습니다.

편집 : 차단 이벤트 였으므로 특히 HAProxy와 같은 것에 권장됩니다. HAProxy 팀은 위에 링크 된 릴리스 게시물에서 이것이 더 이상 사실이 아님 임을 충분히 분명히했습니다.

우리는이 요청을 꽤 많이 받았으며이를 구현하는 가장 좋은 방법을 계획하는 데 시간을 보냈습니다. 차단하지 않고 해결책을 찾았습니다!

댓글

  • stdout / err에 로깅하는 이유 " 권장하지 않음 "? 이것이 당신의 의견입니까, 아니면 그 문제에 대한 공식 문서가 있습니까?
  • @Florian, 당신이 맞습니다. 나는 과거의 행동에 오해를 받았다. 최근 릴리스를 차단하지 않으므로 문장이 의견이 많고 잘못되었습니다. 답변을 수정했습니다. 감사합니다!

답변

사용자 홈 디렉토리에서 구성을 시도했습니다. haproxy에 권한이 없습니다. 사용자의 홈 디렉토리에 액세스하여 문제가 발생합니다.

대신 다른 위치에서 시도하는 대신 /var/<directory>

log /var/<directory>/ha.log 

댓글

  • sudo touch /var/log/ha.log를 시도하고 log /var/log/ha.log local0를 내 구성에 추가했지만 위의 connection refused와 동일한 오류가 발생했습니다.
  • 로그에서 왜 local0을 마지막에 제공합니까?
  • 나는 그것을 놔두려고했지만 다시 시작했을 때 'log' expects <address> and <facility> as arguments. 오류가 발생하여 거기에 뭔가가 필요했습니다. 지침에 따르면 <facility> must be one of the 24 standard syslog facilities (문제의 일부라고 생각합니다)

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다