2012-01-24 36 views
16

Tôi đã cài đặt đá quý oink để theo dõi việc sử dụng bộ nhớ của ứng dụng đường ray của tôi. Để xem báo cáo ỉn tôi cần phải chạy lệnh này trong terminal:Sử dụng đá quý oink với heroku

oink --threshold=75 /log/* 

Khi tôi chạy nó trên máy tính của tôi nó cho thấy các báo cáo cho các môi trường phát triển. Vấn đề là tôi quan tâm nhiều hơn đến việc xem báo cáo cho môi trường sản xuất của mình. Ứng dụng của tôi được lưu trữ trên heroku, có cách nào tôi có thể chạy lệnh thiết bị đầu cuối của oink cho môi trường sản xuất của heroku không?

Cảm ơn

+0

Cậu con số này ra? cũng bị mắc kẹt .. – jalagrange

+1

Nó cũng đáng chú ý là với nhiều dynos không có trật tự đăng nhập bảo đảm mà dường như vít lên các phân tích cú pháp oink. Trong số ~ 100 yêu cầu có 2 ứng dụng dyno heroku oink chỉ phân tích 7 yêu cầu. – agmin

Trả lời

-3

Sử dụng Di tích mới - như được trả lời trong câu hỏi khác của bạn.

+0

Điều này không trả lời được câu hỏi. Vui lòng xem xét sử dụng các nhận xét cho các câu trả lời như vậy. – Michael

2

Bạn cần thiết lập cống cho nhật ký heroku của mình để chạy lệnh oink. Ví dụ, tôi có nhật ký heroku của tôi thoát ra một máy chủ rsyslog linux cục bộ.

+0

Điều này là đúng, tuy nhiên ngay cả khi bạn xuất nhật ký của mình, tôi vẫn chưa tìm thấy cách để chúng có định dạng "trình ghi nhật ký tuân thủ 3000" hợp lệ. Đó là một yêu cầu để Oink hoạt động. Bất kỳ ý tưởng? – jalagrange

31

tôi đã ỉn làm việc trên Heroku làm điều này:

Bạn phải thay đổi log_level của bạn để thông tin cho các bản ghi ỉn xuất hiện:

heroku config:add LOG_LEVEL=info 

Thêm middleware ỉn để production.rb với một tuỳ chỉnh stdout logger

config.middleware.use(Oink::Middleware, :logger => Hodel3000CompliantLogger.new(STDOUT)) 

Khi bạn muốn phân tích nhật ký, hãy nối chúng vào một tệp cục bộ, sau đó xóa tiền tố của cô ấy và chỉ lọc theo các đường thẳng.

heroku logs --tail > log/production.log 
cat log/production.log | cut -c 46- | grep 'Oink\|Memory\|Instantiation' > log/production-oink.log 

Sau đó chạy ỉn trên log địa phương mới của bạn

oink --threshold=0 log/production-oink.log 

Bạn cũng có thể tải về các bản ghi từ logentries hoặc kẹp giấy

+4

Có vẻ như đã thiếu một lối thoát trên char ống như 'Oink \ | Instantiation \ | Memory'. Tuy nhiên, vẫn không xử lý nội dung oink cho tôi, không chắc chắn liệu có cắt đúng nội dung hay không. – brunoghisi

+1

Thay đổi để cắt -c 46- làm việc cho tôi. – johnnymire

+2

Cần thiết: cat filename.log | cắt -c 46- | grep 'Oink \ | Memory \ | Instantiation' –

2

Thay vì chuyển đổi các logger để Hodel3000Compliant bạn cũng có thể sửa đổi một chút bản ghi Heroku của bạn với vim, ví dụ: bằng cách sử dụng các lệnh sau:

:%s/2013-01-25T/Jan 25/
:%s/+00:00// 
:%s/app\[web.1\]/rails\[1\]/ 
:%s/app\[web.2\]/rails\[2\]/ 

của nhật ký gốc Heroku như những:

2013-01-25T15:05:58+00:00 app[web.1]: Oink Action: tools#some_tool 
2013-01-25T15:05:58+00:00 app[web.1]: Memory usage: 303444 | PID: 2 
2013-01-25T15:05:58+00:00 app[web.1]: Oink Log Entry Complete 

trở thành:

Jan 25 15:05:58 rails[1]: Oink Action: tools#some_tool 
Jan 25 15:05:58 rails[1]: Memory usage: 303444 | PID: 2 
Jan 25 15:05:58 rails[1]: Oink Log Entry Complete 

và ỉn thích họ;) Tất nhiên, trước hết thu hẹp thời gian nếu có thể vấn đề xảy ra trong nhật ký bằng cách sử dụng NewRelic.

UPDATE:

Một bộ vim lệnh để sửa chữa các bản ghi Papertrail cho ỉn:

:%s/\v^\d+\t// 
:%s/2013-01-27T/Jan 27/

Và đi đến dòng đầu tiên, sử dụng tổ hợp phím CTRL-V để đánh dấu vài cột khác còn sót lại, sau đó gõ G để chọn những cột đó vào cuối tập tin. Thực hiện các điều chỉnh trong lựa chọn của bạn bằng mũi tên 'trái'/'phải' và sau đó nhấn 'c' để xóa chúng.

16

Rất tiếc, tôi chưa thể nhận xét nhưng trong trường hợp người khác gặp vấn đề này, một vài điều dường như đã thay đổi kể từ câu trả lời của Gabe Coyne (siêu hữu ích) ở trên. Tôi không cần phải thay đổi log_level Heroku tôi, vì vậy để bắt đầu tạo ra các bản ghi bạn chỉ có thể sử dụng một initializer config/initializers/oink.rb như vậy:

YourApp::Application.middleware.use(Oink::Middleware, :logger => Hodel3000CompliantLogger.new(STDOUT)) 

Hoặc đặt dòng đó trong production.rb nếu bạn chỉ muốn các bản ghi ỉn trong sản xuất. Sau đó, bạn cần phải nhận được các bản ghi vào một file log địa phương, cũng được đề cập trong câu trả lời trước:

heroku logs n500 --app app_name > log/production.log 

Hoặc bạn có thể lấy chúng từ Papertrail hoặc Archiver log mà bạn yêu thích. Các bản ghi địa phương cần phải được cập nhật để các định dạng mà ỉn hy vọng, nhưng tôi thấy rằng grep 'Oink|Memory|Instantiation' đã không làm việc như chuỗi mà dường như đã được gỡ bỏ từ các bản ghi, vì vậy tôi sử dụng này để thay thế:

cat log/production.log | cut -c 46- | grep 'rails\[' > log/production-oink.log 

Sau đó, bạn có thể sử dụng oink --threshold=0 log/production-oink.log và nó sẽ hoạt động.

Điều duy nhất khiến tôi chú ý là số ký tự trước đó bị cắt. Trong khi cut -c 39- dường như đã hoạt động trước đó, tôi đã phải sử dụng cut -c 46-. Rõ ràng điều này thay đổi, vì vậy trong trường hợp nó không rõ ràng, bạn đang cố gắng để có được những dòng trong các nhật ký thô mà trông như thế này:

2013-07-19T18:47:09.494475+00:00 app[web.1]: Jul 19 18:47:09 24ab5d5s-g46c-2d44-dss2-233sdfa99852wd rails[5]: Oink Action: welcome#about 

Để trông như thế này:

Jul 19 18:47:09 24ab5d5s-g46c-2d44-dss2-233sdfa99852wd rails[5]: Oink Action: welcome#about 

Với mặt trước một phần đã bị xóa. Hi vọng điêu nay co ich!

1

Đã làm việc với câu trả lời của hiattp, nhưng cần phải thêm --text vào grep.

cat log/production.log | cut -c 46- | grep 'rails\[' > log/production-oink.log 
5

Nếu bạn đang sử dụng một kho lưu trữ log tải về từ Papertrail, bạn có thể sử dụng một lớp lót để định dạng đầu ra của bạn:

cat log/production.log | cut -f 10- | grep 'rails\[' > log/production-oink.log 
Các vấn đề liên quan