GCP 日志记录到 IoT 设备上的本地和云日志记录?

时间:2021-03-11 08:46:07

标签: python logging google-cloud-platform raspberry-pi iot

我有一些在 IoT 设备(树莓派)上运行的 Python 脚本,我想使用 GCP 日志记录跟踪这些脚本。最初,我的脚本只是记录到本地文件,但现在我希望能够从 GCP 控制台查看我设备的日志。我尝试了以下方法:

# Import the Cloud logging library
import google.cloud.logging
from google.cloud.logging.handlers import CloudLoggingHandler
from google.cloud.logging_v2.resource import Resource

LOG_PROJECT = 'project_id'
RESOURCE_TYPE = 'cloudiot_device'
DEVICE_NUM_ID = 'iot_device_num'
DEVICE_REGISTRY = 'registry_id'
LOCATION = 'location'
LOGGER_NAME = 'rpi1-script-logger'

LOG_LABELS = {'project_id':LOG_PROJECT,
              'device_num_id':DEVICE_NUM_ID,
              'device_registry_id':DEVICE_REGISTRY,
              'location':LOCATION}
LOG_RESOURCE = Resource(type=RESOURCE_TYPE, labels=LOG_LABELS)

# prepare a client with the google cloud logging library
client = google.cloud.logging.Client()

# prepare a handler and attach the client and the resource
handler = CloudLoggingHandler(client, resource=LOG_RESOURCE)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s",'%Y%m%d-%H:%M:%S')
handler.setFormatter(formatter)

# initiate standard python logger and set it up
logger = logging.getLogger(LOGGER_NAME)
logger.setLevel(logging.INFO)
# attach the handler so logs are uploaded to the cloud
logger.addHandler(handler)

起初我认为这个解决方案可行,但最终我停止在 gcp 上获取日志,即使脚本正在运行。在我停止它之后,它说了一些类似“试图推送 X 个待处理日志”的内容,但立即失败了。看起来它卡住了并且没有上传日志,所以我完全丢失了它们,因为我也没有通过更改记录器在本地获得它们。

据我所知,默认的云日志处理程序是后台线程传输,我可以按照文档指示将其更改为同步传输,以便直接上传日志:https://googleapis.dev/python/logging/latest/stdlib-usage.html

但是,我不确定如何更改传输。另外,如果连接丢失,我不希望脚本在尝试上传日志时卡住,广告我的脚本可以在没有连接的情况下继续。有没有更好的方法将我的设备日志上传到 GCP?或者至少让我的记录器将它们都保存到本地文件并尝试上传它们,这样如果卡住了,我可能会浏览我的日志文件并上传它们。我什至考虑过像往常一样在本地保存日志,并使用另一个脚本尝试单独上传它们,但这听起来不是一个好主意。

任何想法将不胜感激,我觉得这是一个已经解决的问题,但我不知道该解决方案可能是什么。

0 个答案:

没有答案