我有日志文件进入ELK堆栈.我想复制一个字段(foo)以便在其上执行各种突变,但是字段(foo)并不总是存在.
如果foo不存在,则仍会创建bar,但会为其分配文字字符串 "%{foo}"
如果字段存在,我怎样才能执行变异?
我正在尝试做这样的事情.
if ["foo"] {
mutate {
add_field => "bar" => "%{foo}
}
}
Run Code Online (Sandbox Code Playgroud) 我有JSON文件,我通过logstash发送给ES.我想在JSON中删除1个字段(它是深字段) - 仅当值为NULL时才会删除.
JSON的一部分是:
"input": {
"startDate": "2015-05-27",
"numberOfGuests": 1,
"fileName": "null",
"existingSessionId": "XXXXXXXXXXXXX",
**"radius": "null",**
"nextItemReference": "51",
"longitude": -99.12,
"endDate": "2015-05-29",
"thumbnailHeight": 200,
"thumbnailWidth": 300,
"latitude": 19.42,
"numOfRooms": "1"
},
Run Code Online (Sandbox Code Playgroud)
该logstash.conf文件的一部分是:
if [input.radius] == "null" {
mutate {
remove_field => [ "input.radius" ]
}
}
Run Code Online (Sandbox Code Playgroud)
当然这是在过滤器内部.
如果值为null,如何删除此字段?
我运行了服务logstash configtest,但给出的错误是:
logstash:无法识别的服务
我能够单独运行logstash服务,但不能运行"configtest".在etc/logstash/conf.d /我创建了logstash.conf文件,其中包含如下所示的代码: -
附加信息:-
service logstash status
? logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; disabled)
Active: active (running) since Mon 2016-12-26 12:40:58 PST; 6s ago
Main PID: 3512 (java)
CGroup: /system.slice/logstash.service
??3512 /usr/bin/java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX...
Dec 26 12:40:58 Mr systemd[1]: Started logstash.
Run Code Online (Sandbox Code Playgroud)
使用configtest运行时的服务: -
root@Mr:/# service logstash configtest
logstash: unrecognized service
Run Code Online (Sandbox Code Playgroud)
我在debian8机器上运行这个,希望我能从你们那里得到一个很好的解决方案.
# This input block will listen on port 10514 for logs to come in.
# host should be an IP on the …Run Code Online (Sandbox Code Playgroud) 我正在使用logstash jdbc来保持mysql和elasticsearch之间的同步.它适用于一张桌子.但是现在我想为多个表做这件事.我需要在终端中打开多个
logstash agent -f /Users/logstash/logstash-jdbc.conf
Run Code Online (Sandbox Code Playgroud)
每个都有一个选择查询或我们有更好的方法这样做,所以我们可以有多个表更新.
我的配置文件
input {
jdbc {
jdbc_driver_library => "/Users/logstash/mysql-connector-java-5.1.39-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/database_name"
jdbc_user => "root"
jdbc_password => "password"
schedule => "* * * * *"
statement => "select * from table1"
}
}
output {
elasticsearch {
index => "testdb"
document_type => "table1"
document_id => "%{table_id}"
hosts => "localhost:9200"
}
}
Run Code Online (Sandbox Code Playgroud) input {
jdbc {
jdbc_driver_library => "sqljdbc4.jar"
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_connection_string => "jdbc:sqlserver://192.168.2.126\\SQLEXPRESS2014:1433;databaseName=test
jdbc_password => "sa@sa2015"
schedule => "0 0-59 0-23 * * *"
statement => "SELECT ID , Name, City, State,ShopName FROM dbo.Shops"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
}
}
filter {
}
output {
stdout { codec => rubydebug }
elasticsearch {
protocol => "http"
index => "shops"
document_id => "%{id}"
}
}Run Code Online (Sandbox Code Playgroud)
我想使用JDBC SQL Server作为输入使用Logstash导入ElasticSearch中的数据,但我得到的错误类路径不正确.
任何人都知道如何使用Logstash连接sqljdbc FILE WITH CONFIG FILE的正确位置
你知道如何使用Logstash的Ruby过滤器,这使我能够在Ruby中编写代码,它通常包含在配置文件中,如下所示
filter {
ruby {
code => "...."
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有两个Jar文件,我想包含在我的过滤器中,以便我可以根据我在这些Jar文件中的操作处理我的输入.但是,我不能(显然)在ruby代码中包含Jar文件.我一直在寻找解决方案.
我正在将一组数据解析为ELK堆栈,供一些非技术人员查看.作为其中的一部分,我想在发送到ElasticSearch之前从事件中删除除特定已知字段子集之外的所有字段.
我可以明确指定每个字段放入mutate过滤器,如下所示:
filter {
mutate {
remove_field => [ "throw_away_field1", "throw_away_field2" ]
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,无论何时将新字段添加到输入数据(这可能经常发生,因为数据是从队列中提取并由多个系统用于多种目的),它将需要更新过滤,这是额外的开销.不需要.更不用说在输入流更新和更新过滤之间是否有一些敏感数据通过,这可能是不好的.
有没有办法使用logstash过滤器迭代对象的每个字段,如果它不在提供的字段名称列表中,则删除remove_field?或者我是否必须编写自定义过滤器来执行此操作?基本上,对于每个单个对象,我只想保留8个特定字段,并且绝对抛弃其他所有字段.
看起来if ![field] =~ /^value$/logstash.conf文件中提供了非常小的类型逻辑,但我没有看到任何示例会在for each样式中迭代字段本身并将字段名称与值列表进行比较.
回答:
在将logstash升级到1.5.0以便能够使用诸如prune之类的插件扩展之后,解决方案最终看起来像这样:
filter {
prune {
interpolate => true
whitelist_names => ["fieldtokeep1","fieldtokeep2"]
}
}
Run Code Online (Sandbox Code Playgroud) 当同时使用Logstash和Elasticsearch时,.raw为分析的字段附加字段,以便在使用像Kibana这样的工具查询Elasticsearch时,可以按原样使用字段的值而不进行单字分割,什么不可以.
我使用最新版本的所有内容构建了一个新的ELK堆栈安装,并注意到我的.raw字段不再像旧版本的堆栈那样被创建.有很多人发布了在Elasticsearch上创建模板的解决方案,但是我还没有找到很多关于为什么修复这些问题的信息.为了更好地理解更广泛的问题,我问这个具体问题:
.raw字段来自哪里?
我假设Logstash在插入文档时使用字符串as-analyze和字符串as-raw填充Elasticsearch,但考虑到修复位于Elasticsearch模板中的事实,我怀疑我的假设是否正确.
是否可以从Logstash Ruby过滤器插件中启动Ruby调试器?这对调试非常方便.
我通常将应用程序作为docker容器运行,因为它具有很高的灵活性和可用性 有没有办法将容器日志放入我的logstash服务器.