我正在重新使用 gcloud cli 将事件发送到 StackDriver 错误报告。
(非常有限的)文档在这里:https : //cloud.google.com/sdk/gcloud/reference/beta/error-reporting/events/report
无论我作为消息发送什么,我似乎都会收到此错误:
错误:(gcloud.beta.error-reporting.events.report) INVALID_ARGUMENT:ReportedErrorEvent.context 必须包含一个位置,除非
message包含异常或堆栈跟踪。
我尝试将消息格式化为错误报告的 JSON 表示:https : //cloud.google.com/error-reporting/docs/formatting-error-messages 但消息似乎相同。这是一个示例命令和 JSON:
gcloud beta error-reporting events report --service foo --message-file err.json
{
"serviceContext": {
"service": "foo"
},
"message": "Whoops!",
"context": {
"reportLocation": {
"filePath": "/usr/local/bin/test",
"lineNumber": 123,
"functionName": "main"
}
}
}
Run Code Online (Sandbox Code Playgroud) google-cloud-platform gcloud stackdriver google-cloud-stackdriver google-cloud-error-reporting
我目前正在使用 GCE 容器虚拟机(不是 GKE)来运行 Docker 容器,这些容器将其 JSON 格式的日志写入控制台。日志信息会自动收集并存储在 Stackdriver 中。
问题:Stackdriver 将data-field显示jsonPayload为文本 - 而不是 JSON。看起来有效负载中字段的引号被转义,因此不被识别为 JSON 结构。
我同时使用了 logback-classic(就像这里解释的那样)和 slf4j/log4j(使用 JSONPattern)来生成 JSON 输出(看起来不错),但是输出没有正确解析。
我假设,我必须在某处配置输出是 JSON 结构的,而不是纯文本。到目前为止,我还没有找到在使用容器 VM 时执行此操作的选项。
我在 GCP 中有多个项目,我试图在一个地方读取我所有项目的日志。
有什么建议?
目标是存储来自不同应用程序/作业的审计日志,并能够通过一些 id 聚合它们。为此,我们选择了 BigQuery,因此我们需要从日志中获取结构化信息到 BigQuery。
我们成功地使用了部署在 kubernetes 引擎中的应用程序,该应用程序将输出日志作为 json 字符串记录到 stdout 并对其进行解析,其结构可以在 stackdriver 中看到为jsonPayload. 我们从本教程中获取了它。
但是,当我在数据流作业中使用相同的日志附加程序时,它不会被视为结构化消息,而是被视为jsonPayload.message字段中的字符串。
我需要两件事的结构:
实现这一目标的最简单方法是什么?
logback google-cloud-dataflow apache-beam google-cloud-stackdriver
如何将 Cloud-Config 服务的输出获取到 Stackdriver Logging?
我正在使用 node.js API 创建我的 VM 实例,并按照此处找到的示例创建我的服务:https : //cloud.google.com/container-optimized-os/docs/how-to/run-container -instance#starting_a_docker_container_via_cloud-config
一切都运行成功,但我可以看到日志输出的唯一方法是通过 SSH 连接到实例并运行sudo journalctl -ef,但我真的很想将日志流式传输到 Stackdriver Logging。但是 COS 似乎不允许我安装日志代理。
这是我的服务文件,它/home/ci/run.sh只是运行一些 docker 容器,这些容器运行一些测试并输出到标准输出:
- path: /etc/systemd/system/ciservice.service
permissions: 0644
owner: root
content: |
[Unit]
Description=Run tests
Wants=gcr-online.target
After=gcr-online.target
[Service]
User=ci
Group=ci
Environment="HOME=/home/ci"
ExecStartPre=/usr/bin/docker-credential-gcr configure-docker
ExecStart=/bin/bash /home/ci/run.sh
Run Code Online (Sandbox Code Playgroud)
我正在使用容器优化操作系统,因为它带有 Docker、开箱即用的 GCR 访问、安全性,并且可以快速启动。但我想我可能不得不切换回基于 Ubuntu/Debian 的映像,因为这将允许我安装日志代理,但代价是在自定义映像中进行更多的基本配置。
对此使用 COS 的任何帮助将不胜感激,因此在此先感谢您 :)
google-compute-engine stackdriver google-container-os google-cloud-stackdriver
在Google Stackdriver高级过滤器中,我可以插入类似以下内容的内容:
resource.type="container"
resource.labels.cluster_name="mycluster"
textPayload!="Metric stackdriver_sink_successfully_sent_entry_count was not found in the cache."
severity="INFO"
textPayload:(helloworld)
Run Code Online (Sandbox Code Playgroud)
最后一条规则意味着字段textPayload应该包含字符串helloworld。但是我找不到添加NOT运算符的方法。
我会用类似的东西:
textPayload:!(helloworld)
Run Code Online (Sandbox Code Playgroud)
但不起作用
我在 GKE 上的 k8s 集群fluentd默认有一个pod 设置(当前命名为fluentd-gcp-v3.1.0-....),但所有日志都以非结构化的形式出现在单个textPayload字段中。让我的 nginx(和所有其他)日志以某种jsonPayload格式出现会更好。
该结构化记录的文档有很多信息,如果你将要自己手动安装代理,但似乎没有要上哪里GKE得到启用日志结构化信息的任何fluend默认安装在幕后。
脱壳到其中的一个fluentd容器我看到下面的文件,这些文件不是默认CONFIGS(nginx/ syslog/ apache)上面列出的结构化测井文档。
/etc/google-fluentd/config.d
containers.input.conf
monitoring.conf
output.conf
system.input.conf
Run Code Online (Sandbox Code Playgroud)
所以基本上,我在 GKE/Stackdriver 上有非结构化的 nginx 日志。如何将它们转换为结构化?
在 GCP Composer 上创建 Airflow 环境时,会airflow_monitoring自动创建一个名为 DAG 的 DAG ,即使删除它也会返回。
为什么?如何处理?我应该将此文件复制到我的 DAG 文件夹中并辞职以使其成为我代码的一部分吗?我注意到每次上传代码时它都会停止执行此 DAG,因为在它神奇地重新出现之前无法在 DAG 文件夹中找到它。
我已经尝试在 DAG 文件夹中删除它,删除日志,从 UI 中删除它,所有这些同时等等。
google-cloud-platform airflow google-cloud-stackdriver google-cloud-composer
我希望将此信息视为 python 消息:
但目前,我只能看到第一/第二
这是我目前使用的
from google.api_core.exceptions import BadRequest
if __name__ == '__main__':
try:
upload('XXX','XXX')
except BadRequest as e:
print('ERROR: {}'.format(str(e)))
Run Code Online (Sandbox Code Playgroud)
上传:
def upload(FILE_NAME, TABLE_ID):
client = bigquery.Client()
dataset_ref = client.dataset(config.DATASET_ID )
table_ref = dataset_ref.table(TABLE_ID)
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
job_config.autodetect = False
with open(FILE_NAME, 'rb') as source_file:
job = client.load_table_from_file(
source_file,
table_ref,
location='EU', # Must match the destination dataset location.
job_config=job_config) # API request
job.result() # Waits for table load to complete.
Run Code Online (Sandbox Code Playgroud) python error-handling google-bigquery google-cloud-stackdriver python-bigquery
当没有数据上传到 Big Query 表超过一天时,为每封电子邮件设置 Big Query 警报的最佳方法是什么?我想到的是:
但我不确定最快和最好的方法是什么。我尝试通过 Stackdirver -> Create New Alert Ploicy 进行设置
但是没有发送电子邮件。虽然有些表几个月没有数据......
google-bigquery google-cloud-platform stackdriver google-cloud-stackdriver
stackdriver ×4
logging ×2
airflow ×1
apache-beam ×1
fluentd ×1
gcloud ×1
google-cloud-error-reporting ×1
json ×1
logback ×1
python ×1