2015-01-06 33 views
8

Có cách nào để 1) lọc và 2) truy xuất dữ liệu nhật ký thô ra khỏi Cloudwatch qua API hoặc từ CLI không? Tôi cần trích xuất một tập hợp con các sự kiện nhật ký từ Cloudwatch để phân tích.Làm cách nào để lọc và trích xuất dữ liệu sự kiện nhật ký thô từ Amazon Cloudwatch

Tôi không cần tạo chỉ số hoặc bất kỳ thứ gì như thế. Đây là nghiên cứu lịch sử về một sự kiện cụ thể kịp thời.

Tôi đã chuyển đến trình xem nhật ký trong bảng điều khiển nhưng tôi đang cố gắng rút ra các dòng cụ thể để kể cho tôi một câu chuyện trong một khoảng thời gian nhất định. Trình xem nhật ký sẽ không thể sử dụng được cho mục đích này. Nếu tôi có tệp nhật ký thực sự, tôi sẽ chỉ grep và được thực hiện sau khoảng 3 giây. Nhưng tôi thì không.

Làm rõ

Trong mô tả của Cloudwatch Logs, nó nói, "Bạn có thể xem dữ liệu gốc log (trong chế độ xem web?) để xem nguồn gốc của vấn đề nếu cần thiết. Đăng nhập dữ liệu có thể được lưu trữ và truy cập (chỉ trong chế độ xem web?) miễn là bạn cần sử dụng bộ nhớ có độ bền cao, chi phí thấp để bạn không phải lo lắng về việc lấp đầy ổ đĩa cứng. " --italics là của tôi

Nếu chế độ xem bảng điều khiển này là cách duy nhất để lấy dữ liệu nguồn, thì việc lưu trữ nhật ký qua Cloudwatch không phải là giải pháp có thể chấp nhận được cho mục đích của tôi. Tôi cần phải nhận được dữ liệu thực tế với tính linh hoạt đủ để tìm kiếm các mẫu, không nhấp qua hàng tá dòng trang và sao chép/dán. Có vẻ như cách tốt hơn để truy cập dữ liệu nguồn có thể không có sẵn.

Trả lời

26

Để sử dụng AWSCLI (một đồng bằng cũng như với cwlogs plugin) thấy http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/SearchDataFilterPattern.html

Đối với cú pháp mẫu (plain text, [space separated] như như {JSON syntax}) xem: http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/FilterAndPatternSyntax.html

Đối với tiện ích dòng lệnh python awslogs thấy https://github.com/jorgebastida/awslogs.

AWSCLI: bản ghi AWS lọc-log-sự kiện

AWSCLI là CLI chính thức cho các dịch vụ AWS và bây giờ nó hỗ trợ các bản ghi quá.

Để hiển thị trợ giúp:

$ aws logs filter-log-events help 

Bộ lọc có thể dựa trên:

  • tên nhóm log --log-group-name (chỉ người cuối cùng được sử dụng)
  • log tên dòng --log-stream-name (có thể được quy định nhiều lần)
  • thời gian bắt đầu --start-time
  • cuối thời gian --end-time (không --stop-time)
  • lọc patter --filter-pattern

Chỉ --log-group-name là bắt buộc.

Thời gian được biểu thị bằng thời gian sử dụng mili giây (không phải giây).

Cuộc gọi có thể trông như thế này:

$ aws logs filter-log-events \ 
    --start-time 1447167000000 \ 
    --end-time 1447167600000 \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR \ 
    --output text 

It in 6 cột của tab tách văn bản:

  • 1: EVENTS (để biểu thị, dòng là một bản ghi log và thông tin không khác)
  • 2nd: eventId
  • 3rd: timestamp (thời gian được ghi bởi hồ sơ là thời gian sự kiện)
  • 4: logStreamName
  • 5th: message
  • 6: ingestionTime

Vì vậy, nếu bạn có Linux tiện ích dòng lệnh trong tầm tay và chỉ quan tâm đến các thông điệp ghi lại log cho khoảng thời gian từ 2015-11-10T14:50:00Z để 2015-11-10T15:00:00Z, bạn có thể làm cho nó như sau:

$ aws logs filter-log-events \ 
    --start-time `date -d 2015-11-10T14:50:00Z +%s`000 \ 
    --end-time `date -d 2015-11-10T15:00:00Z +%s`000 \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR \ 
    --output text| grep "^EVENTS"|cut -f 5 

AWSCLI với cwlogs cắm

Các cwlogs Plugin AWSCLI là đơn giản để sử dụng:

$ aws logs filter \ 
    --start-time 2015-11-10T14:50:00Z \ 
    --end-time 2015-11-10T15:00:00Z \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR 

Nó hy vọng con người có thể đọc được ngày-thời gian và luôn luôn trả về đầu ra văn bản với (không gian giới hạn) cột:

  • 1: logStreamName
  • 2nd: date
  • 3rd: time
  • 4th till Cuối cùng: message

Mặt khác, nó là khó khăn hơn một chút để cài đặt (vài bước nữa để làm cộng hiện pip đòi hỏi phải khai báo lĩnh vực cài đặt như là một đáng tin cậy).

$ pip install awscli-cwlogs --upgrade \ 
--extra-index-url=http://aws-cloudwatch.s3-website-us-east-1.amazonaws.com/ \ 
--trusted-host aws-cloudwatch.s3-website-us-east-1.amazonaws.com 
$ aws configure set plugins.cwlogs cwlogs 

(nếu bạn thực hiện typo trong lệnh cuối cùng, chỉ cần sửa nó trong ~/.aws/config tập tin)

awslogs lệnh từ jorgebastida/awslogs

này trở thành của tôi yêu thích một - dễ dàng để cài đặt, mạnh mẽ, dễ sử dụng .

Cài đặt:

$ pip install awslogs 

Để liệt kê các nhóm log sẵn:

$ awslogs groups 

Để liệt kê log suối

$ awslogs streams /var/log/syslog 

Để có được hồ sơ và theo họ (xem mới như họ đến):

$ awslogs get --watch /var/log/syslog 

Và bạn có thể lọc các hồ sơ của phạm vi thời gian:

$ awslogs get /var/log/syslog -s 2015-11-10T15:45:00 -e 2015-11-10T15:50:00 

Kể từ phiên bản 0.2.0 bạn có cũng có tùy chọn --filter-pattern.

Sản lượng có các cột:

  • 1: đăng nhập tên nhóm
  • 2: đăng nhập tên dòng
  • 3rd: message

Sử dụng --no-group--no-stream bạn có thể chuyển hai đầu cột tắt.

Sử dụng --no-color bạn có thể loại bỏ các ký tự điều khiển màu trong đầu ra.

EDIT: như awslogs phiên bản 0.2.0 thêm --filter-pattern, văn bản được cập nhật.

0

đã không được sử dụng nó bản thân mình, nhưng đây là một mã nguồn mở cloudwatch sang Excel xuất khẩu Tôi đã xem qua trên GitHub:

https://github.com/petezybrick/awscwxls

Generic AWS CloudWatch để xuất khẩu Spreadsheet CloudWatch doesn' t cung cấp tiện ích Xuất - điều này có. awscwxls tạo bảng tính dựa trên các bộ đặc điểm Không gian/Kích thước/Số liệu thống kê chung/Thống kê . Miễn là AWS tiếp tục theo mẫu Không gian tên/Thứ nguyên/Số liệu thống kê/Thống kê, awscwxls sẽ hoạt động cho Không gian tên (Dịch vụ) hiện tại và trong tương lai. Mỗi bộ thông số kỹ thuật được lưu trữ trong một tệp thuộc tính, do đó, mỗi tệp thuộc tính có thể là được định cấu hình cho một bộ dịch vụ và tài nguyên AWS cụ thể. Hãy xem xem xét thuộc tính run/properties/template.properties để có ví dụ hoàn chỉnh.

+0

Tôi đã làm rõ câu hỏi của mình. Chúng tôi không muốn hoặc cần số liệu và mỗi dòng đăng nhập là một chuỗi biểu mẫu miễn phí. Tôi không cố gắng đếm thông tin đăng nhập hoặc mã trả lại. Tôi đang cố gắng để gỡ lỗi một vấn đề cụ thể từ một điểm cụ thể trong thời gian mà đầu ra gỡ lỗi được xen kẽ trên nhiều kết quả đầu ra khác. Và vấn đề tồn tại trong vài phút vì vậy chỉ cần đi qua và sao chép ra khỏi xem web không phải là một giải pháp khả thi nói chung. – Zach

0

Tôi nghĩ rằng tùy chọn tốt nhất để truy xuất dữ liệu được cung cấp như được mô tả trong API.

1

Nếu bạn đang sử dụng thư viện Python Boto3 để trích xuất Nhật ký đồng hồ điện tử AWS. Hàm get_log_events() chấp nhận thời gian bắt đầu và kết thúc tính bằng mili giây.

Để tham khảo: http://boto3.readthedocs.org/en/latest/reference/services/logs.html#CloudWatchLogs.Client.get_log_events

Đối với điều này bạn có thể mang một đầu vào thời gian UTC và chuyển đổi nó thành mili giây bằng cách sử dụng các module Datetime và timegm và bạn tốt để đi:

from calendar import timegm 
from datetime import datetime, timedelta 

# If no time filters are given use the last hour 
now = datetime.utcnow() 
start_time = start_time or now - timedelta(hours=1) 
end_time = end_time or now 
start_ms = timegm(start_time.utctimetuple()) * 1000 
end_ms = timegm(end_time.utctimetuple()) * 1000 

Vì vậy, bạn có thể cung cấp cho đầu vào như được nêu dưới đây y sử dụng đầu vào sys như:

python flowlog_read.py '2015-11-13 00:00:00' '2015-11-14 00:00:00' 
1

Trong khi câu trả lời của Jan là một tuyệt vời và có lẽ những gì tác giả muốn, xin vui lòng n ote rằng có một cách bổ sung để truy cập có lập trình vào nhật ký - qua subscriptions.

Tùy chọn này dành cho các trường hợp phát trực tuyến luôn được tải xuống liên tục (thường vào luồng Kinesis) và sau đó được xử lý tiếp.

Các vấn đề liên quan