背景:
我们rsyslog创建了日志文件目录,例如:/var/log/rsyslog/SERVER-NAME/LOG-DATE/LOG-FILE-NAME
因此,多个服务器将不同日期的日志分发到中心位置.
现在阅读这些日志并将它们存储在elasticsearch中进行分析我的logstash配置文件是这样的:
file{
path => /var/log/rsyslog/**/*.log
}
Run Code Online (Sandbox Code Playgroud)
问题 :
现在,随着目录中日志文件数量的增加,logstash会为新文件打开文件描述符(FD),并且不会为已读取的日志文件释放FD.由于日志文件是按日期生成的,因此一旦读取它,之后就没有用了,因为在该日期之后它不会被更新.
我已将文件开口限制增加到65K in /etc/security/limits.conf
我们可以在一段时间后让logstash关闭句柄,这样打开的文件句柄数量不会增加太多?
我有一个实体类:
@Entity
@Table(name="CMC_MAP_SERVER_INFO")
@NamedQuery(name="CmcMapServerInfo.getMapServer", query="SELECT c FROM CmcMapServerInfo c")
public class CmcMapServerInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="APPLICATION_NAME")
private String applicationName;
private String remarks;
@Column(name="SERVER_IP")
private String serverIp;
@Column(name="SERVER_NAME")
private String serverName;
@Column(name="SERVER_PORT")
private short serverPort;
public CmcMapServerInfo() {
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Entity class [class cdot.oss.cmsat.conf.ejb.entity.CmcMapServerInfo] has no primary key specified.
Run Code Online (Sandbox Code Playgroud)
我在线阅读并发现实体必须定义主键.但我这里的桌子只是一排桌子.它只是用来保存系统配置.
因此,我只想查询该行是否存在,然后获取该行并更新它.
我的列是serverIp,port,服务器的名称.
我该如何处理删除此错误?
我正在使用logstash-1.4.1,elasticsearch-1.1.1并kibana-3.1.0用于分析我的日志.我能够查看和查询我的日志.
需要在特定日志/事件发生时需要警报/通知.例如:当一次又一次地发生登录失败日志时,需要警报/通知(弹出,通过邮件等).
目前我可以查询我的日志,就像失败的登录一样,但我想要它,只要出现这样的日志,就会出现一个通知/弹出窗口而不是我手动查询它.
可以用以上三种方法完成吗?怎么能实现这一目标?
我在我的应用程序中使用Struts2框架,我的JSP页面上有一个按钮.那是
<s:submit type="button" name="btnSave" />
Run Code Online (Sandbox Code Playgroud)
现在,我希望此按钮的行为与正常的HTML按钮类型一样,不应提交表单并在onclick事件上执行Scripting功能.该函数使用Ajax提交表单.
但是,Struts2将其转换为
<input type="submit" id="add_btnSave" name="btnSave" value="Save"/>
Run Code Online (Sandbox Code Playgroud)
我的表格已提交.
1)如果我使用HTML按钮标签,它将弄乱GUI.我的形式的主题是Ajax.
这是一个head带脚本的标签
<head>
<s:head theme="ajax"/>
<script type="text/javascript">
$("btnSave").click(function(){
alert("aaa");
$.ajax({
url:
type:"POST",
dataType: "json",
error: function(XMLHttpRequest, textStatus, errorThrown){
alert('Error ' + textStatus);
alert(errorThrown);
alert(XMLHttpRequest.responseText);
},
success: function(){
alert('SUCCESS');
}
});
});
</script>
</head>
Run Code Online (Sandbox Code Playgroud)
我的body标签是粉丝:
<body>
<table border="1" width="80%" align="center">
<tr>
<td width="100%">
<s:tabbedPanel id="EmpDetail" useSelectedTabCookie="true">
<s:div id="one" label="Emp Reg." theme="ajax" tabindex="0" labelposition="top">
<center>
<s:form name="frmEmpReg" namespace="/" method="post">
EMPLOYEE REGISTRATIOM TAB<br>
<s:actionmessage …Run Code Online (Sandbox Code Playgroud) 我有两个相关的枚举.
Enum1:
public enum HttpMethodName
{
GET, POST, PUT, DELETE;
}
Run Code Online (Sandbox Code Playgroud)
Enum2:
public enum ProtocolOperation {
CREATE(1), RETRIEVE(2), UPDATE(3), DELETE(4), NOTIFY(5);
private BigInteger operationId;
public BigInteger getOperationId() {
return operationId;
}
private ProtocolOperation(int operationId) {
this.operationId = BigInteger.valueOf(operationId);
}
}
Run Code Online (Sandbox Code Playgroud)
枚举值的映射为:
Create--> POST
Retrieve--> GET
Update--> PUT
Delete--> DELETE
Notify---> POST
Run Code Online (Sandbox Code Playgroud)
因此,值之间存在一对一的映射,除了仅POST可以具有两个值Create或Notify基于条件的情况.
我在考虑将映射保持为List:
public enum HttpMethodName
{
POST(new List(ProtocolOperation.CREATE, ProtocolOperation.NOTIFY)) ,GET ( new List(ProtocolOperation.RETRIEVE) ) ,
PUT (new List(ProtocolOperation.UPDATE) ,DELETE(new List(ProtocolOperation.DELETE) ; …Run Code Online (Sandbox Code Playgroud) 我正在使用PostgreSQL DB并应用它的LISTEN/NOTIFY功能.所以我的监听器在我的AS(应用服务器)上,并且我在我的数据库上配置了触发器,这样当在表上执行CRUD操作时,NOTIFY在AS上发送请求.
java中的LISTENER类:
@Singleton
@Startup
NotificationListenerInterface.class)
public class NotificationListener extends Thread implements NotificationListenerInterface {
@Resource(mappedName="java:/RESOURCES")
private DataSource ds;
@PersistenceContext(unitName = "one")
EntityManager em;
Logger logger = Logger.getLogger(NotificationListener.class);
private Connection Conn;
private PGConnection pgConnection = null;
private NotifyRequest notifyRequest = null;
@PostConstruct
public void notificationListener() throws Throwable {
System.out.println("Notification****************");
try
{
Class.forName("com.impossibl.postgres.jdbc.PGDriver");
String url = "jdbc:pgsql://192.xx.xx.126:5432/postgres";
Conn = DriverManager.getConnection(url,"postgres","password");
this.pgConnection = (PGConnection) Conn;
System.out.println("PG CONNECTON: "+ pgConnection);
Statement listenStatement = Conn.createStatement();
listenStatement.execute("LISTEN notify_channel");
listenStatement.close();
pgConnection.addNotificationListener(new …Run Code Online (Sandbox Code Playgroud) java postgresql database-connection connection-pooling pg-jdbc
我有XSD文件形式的数据模型,然后从中xjc使用命令行生成相应的Java文件.
当我从XSD生成JAXB类时,List类型元素获取为它们生成的getter方法(没有相应的setter方法),如下所示:
public List<Type> getElement3() {
if (element3 == null) {
element3 = new ArrayList<Type>();
}
return this.element3;
}
Run Code Online (Sandbox Code Playgroud)
我在几乎所有从XSD List类型生成的文件中都有很多字段.
使用案例:
现在,我不希望通过null检查生成getter .我的应用程序代码具有逻辑,其中每个字段的getter经常被调用,这导致它们的初始化为空 List.
然后在编组时我必须停止空列表以传递有效负载,以避免通过线路发送大量空列表.
PS:我有一个用例明确Empty List设置的用例,服务器必须删除后端的某些项目.因此,区分值是由用户显式设置还是仅因为在访问字段期间调用了getter而设置的.List
那么,如何让JAXB生成一个没有null检查的getter ?
因为在编译之后编辑生成的java文件会很麻烦,因为它存在于很多文件中,我们有XSD版本需要更新,每次新版本出现时都必须执行编辑.
我正在将我的日志回填到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日的日志.因此,由于时间戳在日志中不可用,所以它默认选择当前年份.
知道如何制作正确的索引吗?
我正在使用Jersey来实现RESTful webservice.现在我返回数据的MediaType是JSON.
@GET
@Produces({MediaType.APPLICATION_JSON })
public Response service() {
return Response
.ok(entity)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.build();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我设置CONTENT_TYPE为json,我的实体将被Jersey框架转换为json.
现在我想自定义我的json响应.
例如:我想删除空元素或更改我的Json对象的键名.默认泽西岛的Json转换:
{
"cinter" : {
"state" : 1,
"checks" : 10,
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是:
{
"cin" : {
"st" : 1,
"cs" : 10,
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以ObjectMapper根据自己的需要使用杰克逊图书馆来自定义我的Json.
但是,如果我想以不同于Jersey默认转换的方式进行JSON转换,这是否是标准方法?
或者我可以在Jersey的ObjectMapper中更改参数吗?
我应该使用自己的ObjectMapper吗?
我正在尝试与第三方系统集成,并且根据对象的类型,返回的XML文档的根元素会发生变化。我正在使用JAXB库进行编组/解组。
根1:
<?xml version="1.0" encoding="UTF-8"?>
<root1 id='1'>
<MOBILE>9831138683</MOBILE>
<A>1</A>
<B>2</B>
</root1>
Run Code Online (Sandbox Code Playgroud)
根2:
<?xml version="1.0" encoding="UTF-8"?>
<root2 id='3'>
<MOBILE>9831138683</MOBILE>
<specific-attr1>1</specific-attr1>
<specific-attr2>2</specific-attr2>
</root2>
Run Code Online (Sandbox Code Playgroud)
我正在使用所有不同的XML将它们映射到通用对象:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ROW")
public class Row {
@XmlAttribute
private int id;
@XmlElement(name = "MOBILE")
private int mobileNo;
@XmlMixed
@XmlAnyElement
@XmlJavaTypeAdapter(MyMapAdapter.class)
private Map<String, String> otherElements;
}
Run Code Online (Sandbox Code Playgroud)
还有用于将未知值转换为映射的适配器:
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.parsers.DocumentBuilderFactory;
import java.util.HashMap;
import java.util.Map;
public class MyMapAdapter extends XmlAdapter<Element, Map<String, String>> {
private Map<String, String> hashMap = …Run Code Online (Sandbox Code Playgroud)