로그를 쉽게 Slack에 흘려 편안 cron 생활

9247 단어 슬랙cron루비

소개



이 기사는 SLP KBIT Advent Calender2016 파트 2의 17 일째 기사입니다.

이번에는, cron에서 실행한 처리의 결과를 Slack에 흘린다고 하는 소재로 기사를 썼습니다.
예제는 Ruby로 작성되었지만 POST가 가능한 언어라면 괜찮습니다.

횡도



우치다 진례의 2nd 라이브가 2017 년 2 월 26 일 (일)에 개최 결정했습니다
매우 좋다

그런데 그 날은 졸론 & 수론 전날입니다
빌어 먹을!!

한화휴제

일의 시작



이것을하려고 시도한 계기에 대해

저는 연구에서 하루에 한 번 cron을 사용하여 스크래핑으로 데이터를 가져오거나,
그 정보로부터 다양한 데이터를 작성·등록하기도 합니다.

그 때, 지금까지 몇 번이나 페이지의 DOM 구조가 바뀌고 있거나,
코드에 결함이 있거나 처리가 성공적으로 실행되지 않아 오류가 발생할 수 있습니다.

그러나 매일 로그를 보러 갈 수는 없기 때문에,
오류를 놓치고 처리가 멈추는 경우가 많았습니다.

그 때문에, 평상시 보는 채팅 툴인 slack에 log를 매일 흘리려고 생각한 것입니다! !

※ slack은 무엇?
h tps : // 세키 CK. c/406

Slack 준비편



1. 정보를 전달할 Slack 팀 이름을 선택하고 Apps&integrations를 클릭합니다.





2. incoming WebHooks 추가



아래와 같은 화면에 찍는다고 생각하므로, Incoming WebHooks를 선택


Add Comfiguration 클릭



3. post 대상 및 Bot 계정 정보 변경





준비 완료



그런 다음 위 이미지의 숨겨진 부분에있는 URL에 POST를 보내면됩니다.

실천편



구현은 기본적으로는, 이하의 2개의 패턴이 된다고 생각한다.
1. 예외 처리에서 오류를 받고 보내기
2. 로그 파일에서 읽은 정보 보내기

필요한 gem
require 'net/http'
require 'uri'
require 'json'

예외 처리 패턴



cron 처리 수가 적은 경우, cron 처리의 에러가 발생할 가능성이 있는 장소에,
예외 처리를 넣어 가면 된다.
request_url = "https://hoks.slack.com/services/????"
uri = URI.parse(request_url)
begin
  # 処理
rescue => e
  data = { text: e.message }
  res = Net::HTTP.post_form(uri, { payload: data.to_json })
end

로그 파일 정보 사용



cron 처리에 Whenever라는 gem을 사용하고 있기 때문에 그것을 예로하고 있습니다.
schedule.rb가 cron의 작업을 관리하는 파일입니다.
태스크를 기술하고 있는 부분의 마지막에 Slack에 흘리는 처리를 쓴 태스크를 기술합니다.
(이번에는 예로서 rake 작업을 준비)
set :output, {:error => 'log/error.log', :standard => 'log/cron.log'}부분에서 cron 작업이 성공하면

schedule.rb
require File.expand_path(File.dirname(__FILE__) + "/environment")

set :output, {:error => 'log/error.log', :standard => 'log/cron.log'}
set :environment, "development"
every 1.days, at: '1:00 am' do
  #cronタスク...

  # 最後にslackに流すタスク(サンプル)
  rake 'slack:cron_log'
end

로그 파일의 정보를 Slack에 흘리는 처리의 예
rake 작업의 일부 발췌

slack.rake
    request_url = "https://hooks.slack.com/services/????"
    uri = URI.parse(request_url)


    # logファイルの情報を抽出
    log = ''
    File.open('./log/error.log', 'r') do |file|
      log = file.read
      log = '成功!!' if log == ""
    end

    data = { text: log }
    res = Net::HTTP.post_form(uri, { payload: data.to_json })

    # logファイルの中身を削除
    File.open('./log/error.log', 'w') do |file|
      file = nil
    end

시도해 보았습니다.



정상과 오류의 경우를 각각 시도했다. (오류는 길기 때문에 일부 생략)
  • 성공적으로 완료된 경우

  • 오류가 발생한 경우


  • 뭔가 부족한



    행복





    결론



    그래서 이번에는 cron의 로그를 Slack에 흘려 보았던 것을 소개했습니다.
    이것으로, 여러분도 쾌적한 cron 라이프를! !

    가능한 한 간단하게 할 수 있는 방법을 고르겠습니다만, 「이쪽이 더 좋다」같은 것이 있으면 가르쳐 주었으면 합니다.

    좋은 웹페이지 즐겨찾기