TL; DR
将容器优化的os 主机日志(ssh和执行的shell命令)发送到Stackdriver 的最佳做法是什么?
背景:
我正在使用Googles Container Optimized OS,效果很好.将容器日志发送到Stackdriver非常容易,但如何将主机日志发送到Stackdriver?
这是出于审计目的,我需要记录所有SSH连接(接受或拒绝)以及通过shell执行的所有命令.以前我只是通过stackdriver主机记录器包将rsyslogd(auth,authpriv)发送到stackdriver.
这适用于在托管实例组(mig)中运行的Container Optimized OS VM,而不是在Google Kubernetes Engine中运行.
它可能非常明显,但我似乎无法找到任何文档.
尝试使用带有多行变量的 YAML 和 Jinja 的 Google 部署管理器,例如:
startup_script_passed_as_variable: |
line 1
line 2
line 3
Run Code Online (Sandbox Code Playgroud)
然后:
{% if 'startup_script_passed_as_variable' in properties %}
- key: startup-script
value: {{properties['startup_script_passed_as_variable'] }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
给出MANIFEST_EXPANSION_USER_ERROR:
错误:(gcloud.deployment-manager.deployments.create) 操作错误 operation-1432566282260-52e8eed22aa20-e6892512-baf7134:
MANIFEST_EXPANSION_USER_ERROR
清单扩展遇到以下错误:扫描“”中的简单键时,在“”中找不到预期的“:”
尝试(但失败):
{% if 'startup_script' in properties %}
- key: startup-script
value: {{ startup_script_passed_as_variable }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
还
{% if 'startup_script' in properties %}
- key: startup-script
value: |
{{ startup_script_passed_as_variable }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
和
{% if 'startup_script' in properties …Run Code Online (Sandbox Code Playgroud) TL;博士
使用PSQL 9.4,有没有办法从jsonb字段中检索多个值,例如使用虚函数:
jsonb_extract_path(x, ARRAY['a_dictionary_key', 'a_second_dictionary_key', 'a_third_dictionary_key'])
Run Code Online (Sandbox Code Playgroud)
希望加快选择多个值所需的几乎线性时间(1值= 300ms,2值= 450ms,3值= 600ms)
背景
我有以下jsonb表:
CREATE TABLE "public"."analysis" (
"date" date NOT NULL,
"name" character varying (10) NOT NULL,
"country" character (3) NOT NULL,
"x" jsonb,
PRIMARY KEY(date,name)
);
Run Code Online (Sandbox Code Playgroud)
大约有100 000行,每行有一个带有90多个键和相应值的jsonb字典.我正在尝试编写一个SQL查询,以相当快的方式选择一些(<10)键+值(<500 ms)
索引和查询:190ms
我开始添加一个索引:
CREATE INDEX ON analysis USING GIN (x);
Run Code Online (Sandbox Code Playgroud)
这使得基于"x"字典中的值快速查询,例如:
SELECT date, name, country FROM analysis where date > '2014-01-01' and date < '2014-05-01' and cast(x#>> '{a_dictionary_key}' as float) > 100;
Run Code Online (Sandbox Code Playgroud)
这需要大约190毫秒(我们可以接受)
检索字典值
但是,一旦我开始在SELECT部分中添加要返回的键,执行时间几乎呈线性增长:
1值:300ms
select jsonb_extract_path(x, 'a_dictionary_key') from analysis …Run Code Online (Sandbox Code Playgroud) 我们将基础架构托管在Google Compute Engine上,并正在考虑对实例组进行自动缩放。我们对队列中的二进制数据进行了大量批处理。在我们的情况下,这意味着:
但是,我发现很难找到一种在Google Compute Engine上自动缩放的方法,因为它们似乎可以在仅实例的指标(例如CPU)上进行缩放。从文档中:
并非所有自定义指标都可以由自动缩放器使用。要选择有效的自定义指标,该指标必须具有以下所有属性:
- 该指标必须是每个实例的指标。
- 该指标必须是有效的利用率指标,这意味着该指标中的数据可用于按比例增加或减少虚拟机的数量。
如果我正确阅读了文档,这将使得很难在全局队列长度上使用自动缩放?
备份解决方案
len(queue)/len(workers)于所有工作人员我正在尝试将一个大的镶木地板文件写入磁盘(大于内存)。我天真地认为我可以聪明地使用 ParquetWriter 和 write_table 增量写入文件,如下所示(POC):
import pyarrow as pa
import pyarrow.parquet as pq
import pickle
import time
arrow_schema = pickle.load(open('schema.pickle', 'rb'))
rows_dataframe = pickle.load(open('rows.pickle', 'rb'))
output_file = 'test.parq'
with pq.ParquetWriter(
output_file,
arrow_schema,
compression='snappy',
allow_truncated_timestamps=True,
version='2.0', # Highest available schema
data_page_version='2.0', # Highest available schema
) as writer:
for rows_dataframe in function_that_yields_data()
writer.write_table(
pa.Table.from_pydict(
rows_dataframe,
arrow_schema
)
)
Run Code Online (Sandbox Code Playgroud)
但即使我生成了块(比如我的例子中的 10000 行)并使用write_table它仍然将整个数据集保留在内存中。
事实证明,ParquetWriter 将整个数据集保留在内存中,同时增量写入磁盘。
是否有办法强制 ParquetWriter 不将整个数据集保留在内存中,或者出于充分的原因根本不可能?
我有一个RecordBatch来自 Plasma DataStore 的文件,我可以将其读入 apyarrow.RecordBatch或 a中pyarrow.Table。我现在尝试在将其转换为 pandas ( to_pandas) 之前过滤掉行。
有没有办法filter在 上使用新的 Dataset API(可以在 ParquetDataset 上使用)中的方法pyarrow.Table?这将使我能够使用这样的过滤器:
[[('date', '=', '2020-01-01')]]
查看源代码,pyarrow.Table和pyarrow.RecordBatch似乎都有一个过滤功能,但至少RecordBatch需要一个布尔掩码。
这可能吗?原因是数据集包含大量非零拷贝的字符串(和/或类别),因此运行to_pandas实际上会引入显着的延迟,而我每次只查找大约 20% 的数据集。
问候,
尼克拉斯
使用Google Deploy Manager时:
gcloud deployment-manager deployments create my-environment --config my-environment.jinja
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ErrorsValueListEntry INVALID_CONFIG
无效的配置文件:模板获取失败:找不到资源
无论我的内容如何my-environment.jinja-即使复制文档中的样本
不知道我在做什么错吗?
pyarrow ×2
python ×2
apache-arrow ×1
hstore ×1
jsonb ×1
pandas ×1
parquet ×1
postgresql ×1
stackdriver ×1