Điểm:2

Đầu ra jsonPayload (ghi nhật ký có cấu trúc) từ nhật ký của Python Google Cloud Function cần thiết để tạo Chỉ số dựa trên nhật ký (LBM) trong GCP

lá cờ mx

tôi cần jsonPayload trong nhật ký của Google Cloud Function thay vì văn bảnPayload. Mục đích của tôi là sử dụng các khóa của từ điển làm nhãn (xem Nhãn chỉ số dựa trên nhật ký) cho Chỉ số dựa trên nhật ký để những chỉ số này có thể được giải quyết trong Grafana.

Tôi đang sử dụng Python khai thác gỗ module, nhưng tôi cũng có thể chuyển sang thứ khác nếu cần.

Tôi cần làm đầu ra trong nhật ký:

jsonPayload: `{'key1':value1, 'key2':value2}`

Nhưng tôi nhận được một văn bảnPayload thay vào đó, toàn bộ dòng tiếp theo là một chuỗi:

"2022-02-08 15:43:32,460 [INFO]: {"key1": value1, "key2": value2}"

Ví dụ thực tế từ nhật ký, ở giữa, bạn thấy văn bảnPayload:

nhập mô tả hình ảnh ở đây

Hình ảnh như văn bản:

{
insertId: "000000-1b431ffd-e42d-4f83-xyz"
nhãn: {1}
logName: "projects/MY_PROJECT/logs/cloudfunctions.googleapis.com%2Fcloud-functions"
getDấu thời gian: "2022-02-08T15:43:41.808217166Z"
tài nguyên: {2}
textPayload: "2022-02-08 15:43:32,460 [INFO]: {"json_metadata": {"countrows": 736203, "countcolumns": 6, "size": 48261360, "gcs_stamp": "2022-02- 08 15:43:32.451000+00:00", "python_stamp": "2022-02-08 15:43:31.055538"}}"
dấu thời gian: "2022-02-08T15:43:32.460Z"
dấu vết: "dự án/MY_PROJECT/dấu vết/dd97759176248586a3d3xyz"
}

Lần thử đầu tiên

Đọc từ https://cloud.google.com/logging/docs/structured-logging:

Trong Cloud Logging, nhật ký có cấu trúc đề cập đến các mục nhật ký sử dụng trường jsonPayload để thêm cấu trúc vào tải trọng của chúng. Ghi nhật ký có cấu trúc áp dụng cho nhật ký do người dùng viết.

Tôi đã cố gắng để có được "ghi nhật ký có cấu trúc" này sau Viết nhật ký có cấu trúc qua

logging.info(json.dumps(json_for_gcp_lbm))

nhưng không có kết quả.

Hơn nữa trong các liên kết: có một tác nhân Ghi nhật ký tích hợp từ GCP sử dụng lưu loát như là Giới thiệu về tác nhân ghi nhật ký dường như chỉ khả dụng cho Google Kubernetes Engine hoặc App Engine, không có trong Google Cloud Function:

Nếu bạn đang sử dụng Google Kubernetes Engine hoặc App Engine linh hoạt môi trường, bạn có thể ghi nhật ký có cấu trúc dưới dạng các đối tượng JSON được tuần tự hóa trên một dòng đến thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn. Tác nhân ghi nhật ký sau đó gửi nhật ký có cấu trúc vào Nhật ký đám mây dưới dạng jsonPayload của LogEntry cấu trúc.

Làm thế nào tôi có thể nhận được jsonPayload trong đầu ra này?

mdobrucki avatar
lá cờ tr
Tôi có hiểu đúng không - đầu ra mà bạn cung cấp là từ việc sử dụng [ví dụ](https://cloud.google.com/functions/docs/monitoring/logging#writing_structured_logs)? Bạn đang sử dụng phiên bản python nào?
questionto42standswithUkraine avatar
lá cờ mx
@mdobrucki Có, tôi đã sử dụng `logging.info(json.dumps(json_for_gcp_lbm))` được lấy từ ví dụ về liên kết đó, nhưng tôi chỉ sử dụng dòng cuối cùng của ví dụ đó, hy vọng rằng điều này đã thành công. Tôi sử dụng chức năng đám mây `Python 3.9`.
mdobrucki avatar
lá cờ tr
Nếu bạn đang sử dụng python 3.9, ví dụ được cung cấp trong tài liệu sẽ thực hiện thủ thuật này, hãy đảm bảo thực hiện theo chính xác và cấu trúc dữ liệu của bạn cho phù hợp. Bạn đã cân nhắc sử dụng thư viện ứng dụng Ghi nhật ký với [ví dụ](https://cloud.google.com/logging/docs/reference/libraries#write_structured_logs) này chưa?
questionto42standswithUkraine avatar
lá cờ mx
@mdobrucki Không, tôi phải giám sát điều đó vì thay vào đó tôi đã tìm kiếm trực tiếp "json có cấu trúc". Tôi sẽ kiểm tra nó với thư viện google và sử dụng trình ghi nhật ký của ví dụ.
mdobrucki avatar
lá cờ tr
Hãy cho tôi biết những gì bạn đã thành lập.
questionto42standswithUkraine avatar
lá cờ mx
@mdobrucki Vâng, nó đã hoạt động. Lỗi của tôi vì hướng dẫn trong liên kết khá rõ ràng. Tôi gặp một số vấn đề với các lớp ngày giờ - Tôi nhận được `google.protobuf.json_format.ParseError: Value 2022-02-09 13:27:35.067000+00:00 có loại không mong muốn `. Nhưng hiện tại đã giải quyết nó bằng `str()` xung quanh lớp datetime đó, cũng có thể sử dụng `. strftime()` để biến nó thành một chuỗi. `default=str` như một tham số mà bạn có thể sử dụng nó như thế nào trong mô-đun Python tích hợp `ghi nhật ký` không hoạt động. Dù sao, bạn có thể trả lời nếu bạn muốn, sau đó tôi có thể "chỉnh sửa" ví dụ của mình về cách tôi làm cho nó hoạt động.
Điểm:1
lá cờ tr

Bạn có thể thiết lập ghi nhật ký có cấu trúc theo ví dụ trong các tài liệu.Đảm bảo phiên bản python của bạn là 3.8 trở lên. Một cách khác để đạt được điều đó là sử dụng Ghi nhật ký thư viện máy khách.

Ví dụ từ OP cho phương thức thứ hai:

Đặt vào yêu cầu của bạn.txt:

google-cloud-logging==3.0.0

là phiên bản mới nhất tại thời điểm viết.

từ google.cloud nhập nhật ký dưới dạng gclogger

(hoặc đặt tên tùy thích)

và gọi nhật ký json bằng:

json_for_gcp_lbm = {MY_JSON_HERE}

    từ google.cloud nhập nhật ký dưới dạng gclogger

    ...

    logging_client = gclogger.Client()
    logger_name = "MY_LOG_NAME_OF_FREE_CHOICE" # Đã lưu trong nhật ký đám mây của google
    logger = logging_client.logger(logger_name)

    # Tôi không biết nó sẽ hoạt động như thế nào với `nhập nhật ký` vì 
    # mô-đun Python tích hợp, nhưng tôi đã làm cho nó hoạt động bằng cách thêm
    # Dòng sau không hoạt động
    # logging.info(json.dumps(json_for_gcp_lbm, default=str))
    # Thay vào đó, chúng ta cần 
    # https://cloud.google.com/logging/docs/samples/logging-write-log-entry#code-sample
    logger.log_struct(json_for_gcp_lbm)

Điều này dẫn đến đầu ra jsonPayload:

nhập mô tả hình ảnh ở đây

Và sau đó, bạn có thể chọn bất kỳ nhãn nào từ json trong menu "Tạo số liệu nhật ký" (Số liệu dựa trên nhật ký/LBM):

nhập mô tả hình ảnh ở đây

questionto42standswithUkraine avatar
lá cờ mx
Tuy nhiên, tôi không biết làm thế nào nó có thể nhận được jsonPayload bằng cách sử dụng `nhập nhật ký nhập khẩu` làm mô-đun Python tích hợp trong liên kết đầu tiên :). Khi chỉ sử dụng dòng cuối cùng của ví dụ, thay vào đó, nó chỉ cung cấp `textPayload`. Có khả năng là tôi cần phần `request` với `global_log_fields = {}` đó để nó hoạt động. Tôi nghĩ rằng `nhập google.cloud.logging` thì "pythonic" hơn, ngay cả khi tôi phải cài đặt và nhập nhật ký đám mây của google cho việc này.
questionto42standswithUkraine avatar
lá cờ mx
Phần thưởng nhỏ, tôi đã không hỏi điều này, tình cờ thấy điều này: có một đoạn tiếp theo trên cùng trang của liên kết đầu tiên của bạn về cách tôi cũng có thể truy cập nhật ký được tạo `google.cloud.logging` mới bằng `jsonPayload` của nó các mục từ bên trong CF, hãy xem [Sử dụng API ghi nhật ký](https://cloud.google.com/functions/docs/monitoring/logging#using_the_logging_api).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.