我使用python脚本自动将日志写入特殊文件, 哪个文件也是我的log-stash的源日志。 上下文可以正确编写(通过python scrpit), 但之后,log-stash无法再读取日志数据,甚至无法重启logstash。
主要步骤是:
以前有人遇到过这个问题吗? 这是我的python代码:
def store(filepath,data):
with open(filepath, 'a') as json_file:
json_file.write(json.dumps(data))
json_file.write("\r")
# json_file.close
def load(filepath):
with open(filepath) as json_file:
data = json.load(json_file)
return data
if __name__ == "__main__":
data = {}
sourceFilePath = "elk_data_source.log"
destFilePath = "elk_data_dest2.log"
for i in range(1,20):
data= load(sourceFilePath)
data["eventType"] = "*ABC"
store(destFilePath, data)
read = open(destFilePath)
line=read.readline()
while line:
print line
'''
context = json.loads(line)
context = context.join([ string.strip().rsplit("}" , 1)[0] , "}"] )
print context
'''
line=read.readline()
# read.close
read.close()
这是我的logstash conf文件,如果手动将数据输入到此日志中,它可以正常工作:
input {
file {
type => "accounts"
path => "/ELK_Data/elk_data_dest2.log"
start_position => "beginning"
}
}
filter {
json{
source => "message"
}
}
output {
stdout { codec=> rubydebug }
elasticsearch {
hosts => "localhost:9200"
index => "logstash-2016.12.20"
}
}
这是我的elk_data_source.log
{"eventType": ["*icbc"], "prodName": ["LDAP"], "prodFmid": ["HRSL420"], "systemSmfid": ["EIMG"]}
版本: logstash-5.0.0 elasticsearch-2.4.1 Python 2.7.6
答案 0 :(得分:0)
我完全不明白你的问题,但是,
不是最后一行应该是read.close()
而不是read.close
即使在第一个函数json_file.close()
中,如果必须使用with
答案 1 :(得分:0)
根据我收集的内容,源文件为 elk_data_source.log ,您尝试将//Character.h
TESTFUNCDLL_API Character MakeCharacter();
class Character
{
int health;
int magic;
public:
ReturnCharacterClass()
{
return *this;
}
}
//Character.cpp
Character MakeCharacter()
{
Character cCharacter;
return cCharacter.ReturnCharacterClass();
}
//UseDll.cs
[DllImport("Character", EntryPoint = "Character")]
//How do I refrence character? -public static extern int character();
覆盖为"eventType" = ["*icbc"]
。但是你错过的是...... *ABC
的值是数组,而你用单值代替 - "eventType"
。
将*ABC
更改为data["eventType"] = "*ABC"
。
这应该解决。如果可能,尝试将这两个文件与文件比较软件进行比较。此外,请检查匹配的大括号或在从文件读取和格式化时可能导致问题的其他空间。