jenkins log를 logstash로 보내서 file로 저장하기

jinwook han·2022년 5월 20일
0
post-thumbnail

jenkins log를 logstash로 보낸 후, csv로 저장한다.

logstash 설정

logstash를 다운받아서 실행한다.

다운 받는 방법:

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
sudo apt-get update && sudo apt-get install logstash

config 설정 방법:

https://devconnected.com/how-to-install-logstash-on-ubuntu-18-04-and-debian-9/#4_Personalize_Logstash_with_configuration_files

cd /etc/logstash/conf.d/

input은 TCP

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-tcp.html

input {
  tcp {
    port => 12345
    codec => json
  }
}

output은 file로 작성한다.

https://www.elastic.co/guide/en/logstash/current/plugins-outputs-csv.html

output {
  file {
    path => "/home/ubuntu/hello.log"
  }
}

완성된 hello.conf 파일:

input {
  tcp {
    port => 12345
  }
}
output {
  file {
    path => "/home/ubuntu/hello.log"
  }
}

실행방법:

https://www.elastic.co/guide/en/logstash/8.2/running-logstash.html

sudo systemctl start logstash.service

실행한 이후 logstash 프로세스가 tcp port를 listen하고 있는지 확인한다.

sudo lsof -i TCP:12345
// sudo로 확인할 것!

잘 듣고 있다.

권한이 없어서 쓰기에 실패할 수도 있다.

{:pipeline_id=>"main", :error=>"(EACCES) Permission denied..

쓰려고 하는 파일에 쓸 수 있도록, 권한 설정을 해주자.

(파일을 chomd 777로 바꾸거나 등등..)

telnet에 접속해서 12345 port에 아무 내용이나 적는다.

~/hello.log에 log가 찍히는 걸 확인할 수 있다!

이제 젠킨스 로그를 보내보자.

jenkins 다운로드

jenkins를 다운 받는다.

https://www.jenkins.io/doc/pipeline/tour/getting-started/

Download Jenkins Generic Java package (.war)
Open up a terminal in the download directory
Run java -jar jenkins.war --httpPort=8080
Browse to http://localhost:8080
Follow the instructions to complete the installation

위와 같이 jenkins로 실행하니, 재실행할때 이전 젠킨스 설정이 휘발했다.

docker로 실행한다.

https://stackoverflow.com/questions/67769806/docker-error-response-from-daemon-manifest-for-jenkinslatest-not-found-manif

docker pull jenkins/jenkins
docker run -p 8080:8080 --name=jenkins-master -d jenkins/jenkins

jenkins logstash 플러그인 사용하기

jenkins에 접속한다.

logstash 플러그인을 다운받는다.

간단한 프로젝트를 만든다.

프로젝트를 실행하기 전에 logstash 서버가 어디인지 jenkins 설정에 기록해야 한다.

시스템 설정으로 들어간다.

설정에 있는 빈칸을 채워주자.

  1. TCP indexer이므로, Logstash TCP로 선택한다.
  2. host name과 port를 적는다.

프로젝트 빌드

방금 만든 프로젝트를 빌드했다.

logstash가 write하는 hello.log를 확인한다.

jenkins의 log가 쌓이는 것을 확인했다!

로그 한 줄당 들어가는 부가 정보가 상당히 크다.

이 정보들이 다 필요한 건가? 필요한 내용만 필터해야할 것 같다.

로그 한 줄을 보기 좋게 정렬하면 다음과 같다.

{
  "data": {
    "id": "1",
    "result": "SUCCESS",
    "projectName": "logstash-test",
    "fullProjectName": "logstash-test",
    "displayName": "#1",
    "fullDisplayName": "logstash-test #1",
    "url": "job/logstash-test/1/",
    "buildHost": "Jenkins",
    "buildLabel": "master",
    "buildNum": 1,
    "buildDuration": 5,
    "rootProjectName": "logstash-test",
    "rootFullProjectName": "logstash-test",
    "rootProjectDisplayName": "#1",
    "rootBuildNum": 1,
    "buildVariables": {
      "PATH": "/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
      "COPY_REFERENCE_FILE_LOG": "/var/jenkins_home/copy_reference_file.log",
      "RUN_DISPLAY_URL": "http://3.39.21.225:8080/job/logstash-test/1/display/redirect",
      "HUDSON_HOME": "/var/jenkins_home",
      "RUN_CHANGES_DISPLAY_URL": "http://3.39.21.225:8080/job/logstash-test/1/display/redirect?page=changes",
      "JOB_URL": "http://3.39.21.225:8080/job/logstash-test/",
      "JAVA_HOME": "/opt/java/openjdk",
      "BUILD_ID": "1",
      "JENKINS_VERSION": "2.347",
      "LANG": "C.UTF-8",
      "JOB_NAME": "logstash-test",
      "NODE_LABELS": "built-in",
      "HUDSON_URL": "http://3.39.21.225:8080/",
      "JENKINS_SERVER_COOKIE": "28e75736e36461f5",
      "JENKINS_SLAVE_AGENT_PORT": "50000",
      "PWD": "/",
      "RUN_TESTS_DISPLAY_URL": "http://3.39.21.225:8080/job/logstash-test/1/display/redirect?page=tests",
      "JENKINS_URL": "http://3.39.21.225:8080/",
      "BUILD_TAG": "jenkins-logstash-test-1",
      "CI": "true",
      "EXECUTOR_NUMBER": "1",
      "HUDSON_SERVER_COOKIE": "28e75736e36461f5",
      "JENKINS_UC": "https://updates.jenkins.io",
      "JOB_BASE_NAME": "logstash-test",
      "CLASSPATH": "",
      "JENKINS_HOME": "/var/jenkins_home",
      "JENKINS_INCREMENTALS_REPO_MIRROR": "https://repo.jenkins-ci.org/incrementals",
      "REF": "/usr/share/jenkins/ref",
      "BUILD_NUMBER": "1",
      "NODE_NAME": "built-in",
      "BUILD_DISPLAY_NAME": "#1",
      "BUILD_URL": "http://3.39.21.225:8080/job/logstash-test/1/",
      "HOSTNAME": "7ca3759494a7",
      "RUN_ARTIFACTS_DISPLAY_URL": "http://3.39.21.225:8080/job/logstash-test/1/display/redirect?page=artifacts",
      "JOB_DISPLAY_URL": "http://3.39.21.225:8080/job/logstash-test/display/redirect",
      "JENKINS_UC_EXPERIMENTAL": "https://updates.jenkins.io/experimental",
      "HOME": "/var/jenkins_home",
      "SHLVL": "0"
    },
    "sensitiveBuildVariables": []
  },
  "message": [
    "Finished: SUCCESS"
  ],
  "source": "jenkins",
  "source_host": "http://3.39.21.225:8080/",
  "@buildTimestamp": "2022-05-14T02:57:18.982+0000",
  "@timestamp": "2022-05-14T02:57:19.271+0000",
  "@version": 1
}

참고자료

https://plugins.jenkins.io/logstash/

0개의 댓글