로그를 쉽게 Slack에 흘려 편안 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.rbrequire 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
시도해 보았습니다.
정상과 오류의 경우를 각각 시도했다. (오류는 길기 때문에 일부 생략)
우치다 진례의 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.rbrequire 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
시도해 보았습니다.
정상과 오류의 경우를 각각 시도했다. (오류는 길기 때문에 일부 생략)
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.rbrequire 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
시도해 보았습니다.
정상과 오류의 경우를 각각 시도했다. (오류는 길기 때문에 일부 생략)
require 'net/http'
require 'uri'
require 'json'
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
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
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 라이프를! !
가능한 한 간단하게 할 수 있는 방법을 고르겠습니다만, 「이쪽이 더 좋다」같은 것이 있으면 가르쳐 주었으면 합니다.
Reference
이 문제에 관하여(로그를 쉽게 Slack에 흘려 편안 cron 생활), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/uchiyu/items/0e0219daa2381af6f8b6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그래서 이번에는 cron의 로그를 Slack에 흘려 보았던 것을 소개했습니다.
이것으로, 여러분도 쾌적한 cron 라이프를! !
가능한 한 간단하게 할 수 있는 방법을 고르겠습니다만, 「이쪽이 더 좋다」같은 것이 있으면 가르쳐 주었으면 합니다.
Reference
이 문제에 관하여(로그를 쉽게 Slack에 흘려 편안 cron 생활), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uchiyu/items/0e0219daa2381af6f8b6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)