我正在将我的日志回填到Elasticsearch中.因此,为了按日期的时间戳创建索引,我使用这样的date过滤器:
date {
"locale" => "en"
match => ["timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
target => "@timestamp"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用来自syslog的日志,而syslog时间戳格式的doest没有年份:
# Syslog Dates: Month Day HH:MM:SS
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
Run Code Online (Sandbox Code Playgroud)
因此,在使用日期过滤器之后,创建的索引就像logstash-2015.12.26
是在阅读2014年12月26日的日志.因此,由于时间戳在日志中不可用,所以它默认选择当前年份.
知道如何制作正确的索引吗?
我正在使用JAXB将我的域模型转换为XML和JSON表示.我有学生pojo转换为XMl/JSON.它具有content可以是任何数据类型的属性.
它的模式定义:
<xs:element name="content" type="xs:anyType" />
Run Code Online (Sandbox Code Playgroud)
因此,生成的java文件具有Object内容类型.
Student.java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "student")
public class Student
extends People
{
................
@XmlElement(required = true)
protected Object content;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下代码进行编组:
马歇尔:
Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "name-binding.xml");
this.ctx = JAXBContext.newInstance("packagename",
packagename.ObjectFactory.class.getClassLoader(), properties);
Marshaller marshaller = ctx.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(MarshallerProperties.MEDIA_TYPE,media-type);
marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT,true);
marshaller.setProperty(MarshallerProperties.JSON_REDUCE_ANY_ARRAYS, true);
StringWriter sw = new StringWriter();
marshaller.marshal(object, sw);
Run Code Online (Sandbox Code Playgroud)
XML:
<student>
<name>Jack n Jones</name>
<content xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">Sid</content> …Run Code Online (Sandbox Code Playgroud) 我们将User数据存储到MongoDB中.客户端提供JSONPath查询以请求过滤的用户集.
例如:
$.users[@.salary > 10000]
是一个JSONPath查询,用于检索工资大于10000的用户.
数据:
"users": [ {
"firstName": "John",
"lastName" : "doe",
"age" : 26,
"salary" : 5000,
"address" : {
"streetAddress": "naist street",
"city" : "Nara",
"postalCode" : "630-0192"
},
"phoneNumbers": [
{
"type" : "iPhone",
"number": "0123-4567-8888"
},
{
"type" : "home",
"number": "0123-4567-8910"
},
........
]
}
Run Code Online (Sandbox Code Playgroud)
然而,同样的MongoQuery将是:
db.inventory.find( { salary: { $gt: 10000 } })
Run Code Online (Sandbox Code Playgroud)
我们的Java应用程序代码连接到MongoDB.
有没有什么办法可以直接运行这个JSONPath查询到MongoDB?
使用Mongo查询意味着将JSONPath查询转换为MongoQuery,这将在代码中进行繁琐的翻译.一个非常强力的方法是让所有用户首先在AS(应用程序)上,然后转换List<Document>为Json字符串,然后运行JSONPath查询.
任何帮助,将不胜感激.
我将为我的项目使用logstash + ES + kibana.我想知道如何将这个框架用于多租户.任何人都可以解释一下Kibana认证后如何在Kibana的仪表板中查询弹性搜索索引和加载?我可以限制kibana查找特定用户或某个ID的弹性搜索的特定索引吗?有人尝过这个吗?
日Thnx
我有一个要支持JSON和XML数据格式序列化/反序列化的XSD。
我使用xjc实用程序生成了Model类。
因此,到目前为止,我已经使用Jackson JSON库处理了JSON数据。
我无法修改Java类,因此我配置ObjectMapper了Mix-In annotations和其他功能PropertyNamingStrategy(如更改字段名),SerializationFeature.WRAP_ROOT_VALUE以通过代码在我的序列化过程中提供配置。
现在,我想对XML序列化过程做同样的事情。
我已经在线阅读了各种选择:
哪一种最适合我的情况(不能编辑带注释的POJO,仅允许代码配置)?
所以我用杰克逊JSON序列化/反序列化成功地uptil现在,现在我也在努力将其用于XML序列化/反序列化使用它jackson-dataformat-xml-2.3.0.jar。
我用过了
objectmapper.reader(Student.class).withRootName("prefix:student").readValue(jsonString)
将我的 JSON(具有带前缀的根名称)反序列化为Student成功运行的类。
现在,我试图将我的 XML 字符串(具有带前缀的根名称)反序列化为Student:
XML:
<prefix:student>
<name>
Jack Jones
</name>
<id>1</id>
</prefix:student>
Run Code Online (Sandbox Code Playgroud)
我的POJO:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"name",
"id",
....
})
@XmlRootElement(name = "student")
public class Student
{
protected String name;
BigInteger id;
..........................
}
Run Code Online (Sandbox Code Playgroud)
我desrializing此使用XmlMapper的jackson-dataformat-xml是这样的:
xmlMapper.reader(Student.class).withRootName("prefix:student").readValue(xmlString)
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
java.io.IOException: com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "prefix"
at [row,col {unknown-source}]: [1,9]
at com.fasterxml.jackson.dataformat.xml.util.StaxUtil.throwXmlAsIOException(StaxUtil.java:24)
at com.fasterxml.jackson.dataformat.xml.XmlFactory._createParser(XmlFactory.java:473)
at com.fasterxml.jackson.dataformat.xml.XmlFactory._createParser(XmlFactory.java:26)
at com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:844)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2091)
Caused …Run Code Online (Sandbox Code Playgroud) 我有一个变量:
private ArrayList<LabelValueBean> circleNameIdList;
Run Code Online (Sandbox Code Playgroud)
在我的Action班级中,它的价值被填充。
I want to display the label in my drop-down in JSP and when one label is selected, the corresponding value to that particular label in circleNameIdListto be passed to the server. 例如:如果 label:NewYork被选中,那么它是对应的id = 5,被发送到服务器。
我怎样才能做到这一点?
到目前为止,我在 JSP 中是这样做的:
<s:select list="#session.circleNameIdList" label="Select Circle:" name="circleNameIdList" id="circleNameIdList"></s:select>
Run Code Online (Sandbox Code Playgroud)
但是,显示不正确。
我正在使用logstash,elasticsearch并kibana分析我的日志.当特定字符串通过emaillogstash中的输出进入日志时,我通过电子邮件发出警报:
email {
match => [ "Session Detected", "logline,*Session closed*" ]
...........................
}
Run Code Online (Sandbox Code Playgroud)
这很好用.
现在,我想提醒一个字段的计数(超过阈值时):
例如,如果user是字段,我想在独特用户数超过5 时发出警报.
可以通过emaillogstash中的输出完成吗?
请帮忙.
编辑: 正如@Alcanzar告诉我做的那样:
配置文件:
if [server] == "Server2" and [logtype] == "ABClog" {
grok{
match => ["message", "%{TIMESTAMP_ISO8601:timestamp} %{HOSTNAME:server-name} abc\[%{INT:id}\]:
\(%{USERNAME:user}\) CMD \(%{GREEDYDATA:command}\)"]
}
metrics {
meter => ["%{user}"]
add_tag => "metric"
}
}
Run Code Online (Sandbox Code Playgroud)
所以根据上面的说法,为了server2和abclog我有一个grok模式来解析我的文件和在usergrok解析的字段上我希望应用度量.
我在上面的配置文件中做了这个,但是当我检查logstash控制台时,我得到了奇怪的行为-vv. …
我有两个相关的枚举:
枚举1:
public enum HttpStatusCode {
ACCEPTED(202),
OK(200),
CREATED(201),
BAD_REQUEST(400),
NOT_FOUND(404),
METHOD_NOT_ALLOWED(405),
REQUEST_TIMEOUT (408),
FORBIDDEN(403),
CONFLICT(409),
INTERNAL_SERVER_ERROR(500),
NOT_IMPLEMENTED(501);
private int httpStatusCode;
private HttpStatusCode(int name) {
this.httpStatusCode = name;
}
public int getHttpStatusCode() {
return httpStatusCode;
}
}
Run Code Online (Sandbox Code Playgroud)
枚举2:
public enum ProtocolStatusCode {
ACCEPTED(1000),
OK(2000),
CREATED(2001),
BAD_REQUEST(4000)
private int protocolStatusCode;
private ProtocolStatusCode(int protocolStatusCode) {
this.protocolStatusCode = protocolStatusCode;
}
public int getStatusCode() {
return protocolStatusCode;
}
}
Run Code Online (Sandbox Code Playgroud)
这两个枚举值在映射中相关,例如
协议状态码2000(OK)与200(OK)有映射。
因此,在我的代码中,我将获得 ProtocolStatusCode (2000),与此相对应,我将需要 HttpStatusCode (200)。
我正在考虑将 ProtocolStatusCode 枚举维护为
ACCEPTED(1000, 202),
OK(2000, 200)
Run Code Online (Sandbox Code Playgroud)
因此,当我得到 …
我正在使用 log4j2 在 Wildfly 服务器(Jboss 8)上记录我的应用程序。
我想要为我的日志定制一个颜色编码,当我在控制台/终端上看到日志时,它工作得非常好。
以下是模式:
log4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Routing name="Routing">
<Routes pattern="$${ctx:logFileName}">
<Route>
<RollingFile name="RollingFile" fileName="standalone/log/platform-${ctx:logFileName}.log" filePattern="standalone/log/platform-${ctx:logFileName}-%d{MM-dd-yyyy}.log.gz" append="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{id}] %style{[%X{logFileName}}{magenta}] [%t] %highlight{[%-5level]}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=green, DEBUG=green bold, TRACE=magenta} %style{%c{1}:%L}{cyan} - %highlight{%msg%n%throwable}{INFO=white,TRACE=magenta}"/>
.....
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在 vi 或 gedit 等文本编辑器中打开日志文件时,我收到未知字符,例如:
[32m15:56:30.536 DEBUG com.syn.test.Test.main() @15 - this is debug message
[m[32m15:56:30.539 DEBUG com.syn.test.Test.main() @19 - this is debug messge
[m
Run Code Online (Sandbox Code Playgroud)
我知道颜色编码在文本编辑器上不起作用,但如何在编辑器中不包含未知字符,并且还能够在控制台中看到颜色编码。