Filter plugins
Filter plugins
- grok
1
2
3
4grok {
match => {"command" => "redis-cli -c -h %{IP:node:} -p %{NUMBER:port}%{DATA:data}" }
remove_field => [ "host" ]
} - ruby
功能描述:将redis info 信息格式化按字段输出
1 | ruby { |
- mutate
功能描述:字段类型指定
1 | filter { |
1 | grok { |
功能描述:将redis info 信息格式化按字段输出
1 | ruby { |
功能描述:字段类型指定
1 | filter { |
logstash强大魅力在于它的插件体系,虽然官方插件很多,但不可能满足所有的要求,因此就需要定制化个性化插件,本次结合Logstash Monitor Redis需求开发专用插件,以实现动态化获取master 实例中info 信息。
1 | $ tree logstash-input-example |
其实只需要这logstash-input-example.gemspec,example.rb两个文件即可。
mypluginname_spec.rb 是测试类。
先看看logstash-input-example.gemspec都做了什么吧!
1 | Gem::Specification.new do |s| |
上面的信息,只要改改版本和名字,其他的信息基本不需要动。
关键的信息还有:
1 | # encoding: utf-8 |
首先第一行的# encoding: utf-8,不要以为是注释就没什么作用。它定义了插件的编码方式。
下面两行:
require “logstash/inputs/base”
require “logstash/namespace”
引入了插件必备的包。
1 | class LogStash::Inputs::Example < LogStash::Inputs::Base |
插件继承自Base基类,并配置插件的使用名称。
下面的一行对参数做了配置,参数有很多的配置属性,完整的如下:
1 | config :variable_name,:validate =>:variable_type,:default =>"Default value",:required => boolean,:deprecated => boolean |
其中
variable_name就是参数的名称了。
validate 定义是否进行校验,如果不是指定的类型,在logstash -f xxx –configtest的时候就会报错。它支持多种数据类型,比如:string, :password, :boolean, :number, :array, :hash, :path (a file-system path), :codec (since 1.2.0), :bytes.
default 定义参数的默认值
required 定义参数是否是必须值
deprecated 定义参数的额外信息,比如一个参数不再推荐使用了,就可以通过它给出提示!典型的就是es-output里面的Index_type,当使用这个参数时,就会给出提示
第一步,首先把这个插件文件夹拷贝到下面的目录中
1 | logstash-2.1.0\vendor\bundle\jruby\1.9\gems |
第二步,修改logstash根目录下的Gemfile,添加如下的内容:
1 | gem "logstash-filter-example", :path => "vendor/bundle/jruby/1.9/gems/logstash-filter-example-1.0.0" |
第三步,编写配置文件,test.conf:
1 | input{ |
第四步,输入logstash -f test.conf时,输入任意字符,回车~~~大功告成!
1 | { |
第一步,build
1 | gem build logstash-input-example.gemspec |
会在当前路径下生成logstash-input-example-2.0.4.gem
第二步,install
1 | bin/logstash-plugin install /logstash-input-example/logstash-input-example-2.0.4.gem |
验证
1 | validating /logstash-input-example/logstash-input-example-2.0.4.gem >= 0 |
第三步,查看plugin:
1 | bin/logstash-plugin list |
第四步,使用
略
开发插件实现根据cluster nodes信息获取redis cluster 中master节点 info信息。使用该插件只用输入一条命令,即可动态获取相关信息。
此插件是基于exec基础上封装的,主要修改内容为:
1 | def execute(command, queue) |
使用方式
1 | redisexec { |
完整使用案例
将info 信息存储到 ElasticSerach中
1 | input { |
1.新建一个Maven项目JDK版本和系统版本不对应,
2.右键Maven项目->Maven->Update ProjectJDK版本改变了,
3.操作系统的JDK重装了新的版本,这是引起前面两个现象的主要原因。
修改方法(假如系统jdk版本是1.8):
方法一:在pom.xml文件中指定jdk的版本:
1 | <build> |
使用案例如下:
1 | <plugin> |
在开发过程中经常需要将依赖包与代码包分离,配置文件与代码包分离,这样更便于部署与修改参数。依次案例基于以上场景展开,借助于maven-jar-plugin与maven-assembly-plugin。
pom内容如下:
1 | <build> |
package.xml内容:
1 | <assembly> |
maven-jar-plugin只是讲代码打成一个jar,而对部署包的构建是由assembly插件完成的。
结合启动、停止脚本即可高效便捷的部署一个项目。
start.sh:
1 | #!/bin/sh |
stop.sh:
1 | #!/bin/sh |
beats + elasticsearch +logstash + kibana 这套工具集合出自于Elastic公司 https://www.elastic.co/guide/index.html
工具集功能
1 | http://localhost:9200/_template |
1 | http://localhost:9200/_cat/indices |
1 | http://localhost:9200/packetbeat-*/_search?pretty |
1 | http://localhost:5601/ |
1 | http://localhost:9200/_plugin/head/ |
1.删除模板
1 | curl -XDELETE 'http://localhost:9200/_template/packetbeat' |
2.上传模板
1 | curl -XPUT 'http://localhost:9200/_template/packetbeat' -d@/etc/packetbeat/packetbeat.template.json |
3.删除documents
1 | curl -XDELETE 'http://localhost:9200/packetbeat-*' |
一、上传原数据文件
将data.txt文件上传到到hdfs上,内容如下:
1 | key1 col1 value1 |
数据以制表符(\t)分割。
二、将数据写成HFile
通过mapredure将data.txt按hbase表格式写成hfile
pom.xml文件中依赖如下
1 | <!-- hadoop --> |
编写BulkLoadMapper
1 | public class BulkLoadMapper extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> { |
编写BulkLoadDriver
1 | public class BulkLoadDriver extends Configured implements Tool { |
整个项目需要将hbase-site.xml、yarn-site.xml、mapred-site.xml放入resources下。本地运行出错的话,再加入org.apache.hadoop.io.nativeio.NativeIO到当前工程中
三、数据加载
首先修改hadoop-env.sh配置,加入以下:
1 | export HBASE_HOME=/data/bigdata/hbase-1.0.0-cdh5.4.0 |
将数据按HFile写入到hdfs中,然后进入$HBASE_HOME/bin中执行以下命令
1 | /data/bigdata/hadoop-2.6.0-cdh5.4.0/bin/hadoop jar ../lib/hbase-server-1.0.0-cdh5.4.0.jar completebulkload /user/truman/hfile truman |
1 | public class HFileLoader { |
1 | [root@LAB3 bin]# ./hbase shell |
查看docker安装版本
2. docker search
查找opentsdb相关的镜像
1 | $ docker search opentsdb |
拉去镜像
1 | $ docker pull **/** |
查看当前机器运行的docker容器
构建镜像
1 | docker build -t=truman/redis:3.0.6 . |
1 | $ docker run ubuntu /bin/echo 'Hello world' |
参数 | 解释 |
---|---|
docker | 告诉操作系统我们要使用docker应用 |
docker run | 组合起来意思就是运行一个docker镜像 |
ubuntu | 镜像(image)名称 |
/bin/echo ‘Hello world’ | 告诉docker我们要在容器中执行的操作 |
之后我们就可以看到输出结果:Hello world |
1 | $ docker run -t -i ubuntu /bin/bash |
参数 | 解释 |
---|---|
-t | 为这个容器分配一个虚拟的终端 |
-i | 保持对于容器的stdin为打开的状态(输入)。 |
-d | 让docker容器在后台中运行 |
-p | 将docker容器内部端口映射到我们的host上面,我们可以使用 docker port CONTAINER_ID 来查询容器的端口 映射情况 |
一般情况下 -i 与 -t 参数都是结合在一起使用,这样交互会比较好一点。 |
这个参数是在容器生成的时候传入的,例如:指定hosts
1 | docker run -d -p 4244:4242 --name opentsdb5 --add-host lab1:192.168.0.101 --add-host lab2:192.168.0.102 --add-host lab3:192.168.0.103 truman/opentsdb |
都是在镜像名字之前传入的,可以写多个
6. docher start/stop/restart
该命令可以操作容器
7. docker rmi
强制删除镜像
1 | $ docker rmi -f <img_id> |
在容器以守护进程运行的过程中,可以通过docker logs命令查看log日志,具体用法如下:
1 | $ docker logs -ft <img_id> |
以终端模式查看最新log。还有其他命令:docker logs –tail 10
9. 更多命令
1 | Commands: |
所有指令都是大写
两个都是将本地文件复制到镜像中,区别是ADD可以指定绝对路径的文件,言外之意是可以上传除当前目录之外的文件。而COPY只能上传当前目录的文件。
这两条命令复制文件夹的话,只会讲子目录复制到指定目录下。例如
ADD redis3.0.4 /opt/app/redis/
只会将redis3.0.4下文件复制到redis目录下,不包含redis3.0.4目录。COPY同理
2. CMD,ENTRYPOINT
两个都是容器启动时运行的命令,区别是CMD可以被覆盖,而ENTRYPOINT不会。ENTRYPOINT只能是最后一个生效。
在开发过程中经常需要新建工程,新建工程使用自带的archetype,往往不能满足项目开发需求,这就需要我们开发出自己的archetype。
本次使用create-from-project来实现自定义archetype(方法至少两种)
首先使用eclipse创建一个新的maven project,然后把配置好的一些公用的东西放到相应的目录下面 比如说会将一些常用的java代码存放到src/main/java目录下面;会将一些通用的配置文件放到src/main/resources目录下面;如果是javeEE工程,还会有一些jsp等等的文件存放到src/main/webapp目录下面
在pom.xml文件中添加以下内容
1 | <build> |
在工程跟目录下运行maven命令
1 | mvn archetype:create-from-project |
然后会在target目录下面生成generated-sources目录,这个就是生成的 archetype
进入generated-sourced/archetype目录,运行maven命令:
1 | mvn install |
这样就把自定义的archetype安装到本地仓库了。
archetype安装的地址是在maven安装目录下面的conf/settings.xml文件中指定的(
默认会在 ~/.m2 目录下面生成一个archetype-catalog.xml文件(和默认的settings.xml在同一个目录), 声明了该archetype的groupId、artifactId和其他属性。
因为Eclipse创建maven项目过程中,选择的“Default Local”指向的地址就是 ~/.m2,所以文件archetype-catalog.xml会被eclipse自动读取,使用eclipse创建maven项目的时候可以在”Default Local”一项中找到刚才自定义archetype名字。
安装到本地仓库中的archetype只可以被自己使用,如果想要共享,那么在第四步的时候使用deploy命令,不要使用install命令。
如果想要卸载刚才安装的archetype,只需要将~/.m2目录下面的archetype-catalog.xml文件中对应的
问题:eclipse中找不到自定义archetype?
首先查看自定义的版本是否是0.0.1-SNAPSHOT,如果是这个的话,需要勾选include snapshot archetypes
1.http://my.oschina.net/wangrikui/blog/498807
2.http://blog.csdn.net/sxdtzhaoxinguo/article/details/46895013