8月 062018
 

查看集群状态

curl http://192.168.0.202:9200/_cat/health?v

查看集群节点信息

curl http://192.168.0.202:9200/_cat/nodes?v

查看索引

curl http://192.168.0.202:9200/_cat/indices?v

创建名为test-2018.08.06的索引

curl -X PUT http://192.168.0.202:9200/test-2018.08.06

删除索引

curl -XDELETE http://192.168.0.202:9200/test-2018.08.06

 Posted by at 下午5:12
7月 212018
 

jenkins安装

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins -y   
选择安装默认插件即可包含大部分插件

全局工具配置

JDK环境配置

git配置

maven配置

 Posted by at 下午10:42  Tagged with:
7月 062018
 

UPDATE wp_options SET option_value = replace( option_value, ‘http://www.zwl520.com’, ‘http://red.zwl520.com’ ) WHERE option_name = ‘home’ OR option_name = ‘siteurl’;

UPDATE wp_posts SET post_content = replace( post_content, ‘http://www.zwl520.com’, ‘http://red.zwl520.com’ ) ;

UPDATE wp_posts SET guid = replace( guid, ‘http://www.zwl520.com’, ‘http://red.zwl520.com’ ) ;

6月 292018
 

Logstash中的 logstash-filter-useragent 插件可以帮助我们过滤出浏览器版本、型号以及系统版本。

使用if语句,只有在 user_agent 字段不为空时才会使用该插件。

target 将过滤出来的 user agent 信息配置到单独的字段中。

source 为必填设置,设置为包含 user agent 的字段。

配置如下:

if [user_agent] != "-" {
          useragent {
          target => "ua"
          source => "http_user_agent"
  }
}

输出内容:

"ua" => {
          "build" => "",
        "os_name" => "Other",
           "name" => "curl",
         "device" => "Other",
          "patch" => "0",
          "minor" => "29",
          "major" => "7",
             "os" => "Other"
    },

完整配置内容

input {
  file {
    path => "/var/log/nginx/access.log"
    type => "nginx"
    start_position => "beginning"
    codec => "json"
  }
}
filter {
      json {
          source => "message"
          remove_field => ["message"]
      }
      geoip {
          source => "remote_addr"
          target => "geoip"
          database => "/opt/GeoLite2-City.mmdb"
          add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"]
          add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"]
      }
     if [user_agent] != "-" {
          useragent {
          target => "ua"
          source => "http_user_agent"
  }
      mutate {
          convert => ["[geoip][coordinates]", "float"]
      }
}
}
output {
        elasticsearch {
        hosts => ["192.168.30.208:9200"]
        index => "logstash-nginx-access-%{+YYYY-MM-dd}"
        }
}

注意

在kibana中使用,一定要索引刷新字段,不然不能使用,只能查看

 Posted by at 下午6:21
6月 292018
 

Nginx日志格式

格式如下

log_format json '{"timestamp":"$time_iso8601",'
'"server_hostname":"$hostname",'
'"serverip":"$server_addr",'
'"clientip":"$remote_addr",'
'"x_real_ip":"$http_x_forwarded_for",'
'"user_name":"$remote_user",'
'"body_bytes_sent":"$body_bytes_sent",'
'"bytes_sent":"$bytes_sent",'
'"connection":"$connection",'
'"connection_requests":"$connection_requests",'
'"request_uri":"$scheme://$http_host$request_uri",'
'"http_referer":"$http_referer",'
'"request_time":"$request_time",'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_addr":"$upstream_addr",'
'"upstream_cache_status":"$upstream_cache_status",'
'"http_user_agent":"$http_user_agent",'
'"status": "$status",'
'"request_method": "$request_method",'
'"requesturl": "$request_uri"}';

或者更简单的格式

log_format json '{ "@timestamp": "$time_iso8601", '
         '"remote_addr": "$remote_addr", '
         '"remote_user": "$remote_user", '
         '"body_bytes_sent": "$body_bytes_sent", '
         '"request_time": "$request_time", '
         '"status": "$status", '
         '"request_uri": "$request_uri", '
         '"request_method": "$request_method", '
         '"http_referrer": "$http_referer", '
         '"http_x_forwarded_for": "$http_x_forwarded_for", '
         '"http_user_agent": "$http_user_agent"}';

注意:

修改了字段一定要刷新kibana中索引的字段才能使用

Kibana相关配置

统计UV,去重后的geo.ip, 不是很准确,因为一个公网IP下面有多个内网 ,所以只能统计到1次

统计PV,所有请求总数

访问主机统计

访问ip top10包括城市

访问趋势

访问地域分布

访问页面top10及次数

指定时间内的ip访问趋势

响应代码分布情况

浏览器统计

设备统计

操作系统统计

 Posted by at 下午5:45  Tagged with:
6月 292018
 

 IP地址位置用于确定IP地址的物理位置,因为ELK已经收集了web日志,如果通过ELK分析出来用户来源地址的比例,那么多网站机构的调整都是非常有帮助的。

这个插件与开箱即用的GeoLite2(https://dev.maxmind.com/geoip/geoip2/geolite2/)城市数据库捆绑在一起。 从Maxmind的描述 —-GeoLite2数据库是免费的IP地理位置数据库,可与MaxMind的GeoIP2数据库相媲美,但不太准确”。 有关更多详细信息,请参阅GeoIP Lite2许可证。Maxmind的商业数据库(https://www.maxmind.com/en/geoip2-databases)也支持这个插件。简单来说就是两个数据库一个免费的一个商业的,免费的不如商业的地理位置精准。

       如果您需要使用捆绑的GeoLite2城市以外的数据库,则可以直接从Maxmind网站下载数据库,并使用数据库选项指定其位置。 GeoLite2数据库可以从这里下载(https://dev.maxmind.com/geoip/geoip2/geolite2/)。

       如果您想获得自治系统编号(ASN)信息,您可以使用geolite2 – ASN数据库。

如果GeoIP查找返回经度和纬度,则会创建[geoip][location]字段。该字段以GeoJSON(http://geojson.org/geojson-spec.html)格式存储。此外,还提供了默认的Elasticsearch模板elasticsearch输出(https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html)映射这[geoip] [location]字段添加到Elasticsearch geo_point。

       由于这个字段是一个geo_point,它仍然是有效的GeoJSON,您将获得Elasticsearch的地理空间查询,构面和过滤器功能以及为所有其他应用程序(如Kibana的地图可视化)提供GeoJSON的灵活性。

      本产品包含由MaxMind创建的GeoLite2数据,可从中获取http://www.maxmind.com. 这个数据库是根据授权知识共享署名 – 相同方式共享4.0国际许可(https://creativecommons.org/licenses/by-sa/4.0/)。

      GeoIP过滤器的版本4.0.0和更高版本使用MaxMind GeoLite2数据库并支持IPv4和IPv6查找。 4.0.0之前的版本使用传统的MaxMind GeoLite数据库,仅支持IPv4查找。 

geoip配置

nginx日志

Nginx日志json格式如下:

log_format json '{ "@timestamp": "$time_iso8601", '
         '"remote_addr": "$remote_addr", '
         '"remote_user": "$remote_user", '
         '"body_bytes_sent": "$body_bytes_sent", '
         '"request_time": "$request_time", '
         '"status": "$status", '
         '"request_uri": "$request_uri", '
         '"request_method": "$request_method", '
         '"http_referrer": "$http_referer", '
         '"http_x_forwarded_for": "$http_x_forwarded_for", '
         '"http_user_agent": "$http_user_agent"}';

下载GeoLite2-City数据库

wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
tar xf GeoLite2-City.tar.gz
cp GeoLite2-City_20180605/GeoLite2-City.mmdb /opt/

logstash配置文件

input {
  file {
    path => "/var/log/nginx/access.log"
    type => "nginx"
    start_position => "beginning"
    codec => "json"
  }
}
filter {
      json {
          source => "message"           
          remove_field => ["message"]   
      }
      geoip {
          source => "remote_addr"          #源是定义的nginx json格式日志中访问IP的字段
          target => "geoip"                #生成一个新的字段来保存geoip的字段
          database => "/opt/GeoLite2-City.mmdb"     #geoip数据库路径
          add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"]
          add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"]
      }
      mutate {
          convert => ["[geoip][coordinates]", "float"]
      }
}
output {
    stdout {
        codec    => rubydebug
    }
}

测试输出结果

/usr/share/logstash/bin/logstash -f /opt/1.conf

输出如下:

{
          "request_method" => "GET",
                "@version" => "1",
    "http_x_forwarded_for" => "-",
                   "geoip" => {                #这字段为logstash中定义的tags, 下面为geoip生成的字段,包括城市,国家代码等等
         "country_code3" => "CN",
              "latitude" => 22.5333,
         "country_code2" => "CN",
           "coordinates" => [
            [0] 114.1333,
            [1] 22.5333
        ],
             "city_name" => "Shenzhen",
           "region_name" => "Guangdong",
             "longitude" => 114.1333,
              "timezone" => "Asia/Shanghai",
                    "ip" => "113.89.4.236",
          "country_name" => "China",
        "continent_code" => "AS",
           "region_code" => "GD",
              "location" => {
            "lon" => 114.1333,
            "lat" => 22.5333
        }
    },
              "@timestamp" => 2018-06-29T05:46:45.000Z,
         "http_user_agent" => "curl/7.29.0",
                  "status" => "200",
             "remote_addr" => "113.89.4.236",
             "remote_user" => "-",
             "request_uri" => "/",
           "http_referrer" => "-",
                    "host" => "localhost.localdomain",
         "body_bytes_sent" => "3700",
                    "type" => "nginx",
            "request_time" => "0.000",
                    "path" => "/var/log/nginx/access.log"
}

如果是内网地址,geoip解析将会失败,如下

{
          "request_method" => "GET",
                "@version" => "1",
    "http_x_forwarded_for" => "-",
                   "geoip" => {},
              "@timestamp" => 2018-06-29T05:46:45.000Z,
         "http_user_agent" => "curl/7.29.0",
                  "status" => "200",
             "remote_addr" => "192.168.30.208",
             "remote_user" => "-",
             "request_uri" => "/",
           "http_referrer" => "-",
                    "host" => "localhost.localdomain",
         "body_bytes_sent" => "3700",
                    "type" => "nginx",
            "request_time" => "0.000",
                    "path" => "/var/log/nginx/access.log",
                    "tags" => [
        [0] "_geoip_lookup_failure"                   #geoip无法解析内网地址   
    ]
}

如果不想输出无法解析的地址,可以在filter中加入   “if “_geoip_lookup_failure” in [tags] { drop { } }”   如下:

意思是,如果有_geoip_lookup_failure,就删除,这样就可以完全过滤掉内网地址,也不会将这条记录存入索引

filter {
      json {
          source => "message"
          remove_field => ["message"]
      }
      geoip {
          source => "remote_addr"
          target => "geoip"
          database => "/opt/GeoLite2-City.mmdb"
          add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"]
          add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"]
      }
      if "_geoip_lookup_failure" in [tags] { drop { } }
}
      mutate {
          convert => ["[geoip][coordinates]", "float"]
      }
}

配置Kibana

首先在索引管理中,刷新字段, 经测试,后面加的字段必须刷新字段,不然无法使用, 在发现里可以看到,但在可视化中无法使用!!

创建可视化图形

配置如下:

注意:

如果报错

报错“No Compatible Fields: The “[nginx-access-]YYYY-MM” index pattern does not contain any of the following field types: geo_point”

索引格式为[nginx-access-]YYYY-MM的日志文件由logstash输出到Elasticsearch;在 elasticsearch 中,所有的数据都有一个类型,什么样的类型,就可以在其上做一些对应类型的特殊操作。geo信息中的location字段是经纬度,我们需要使用经纬度来定位地理位置;在 elasticsearch 中,对于经纬度来说,要想使用 elasticsearch 提供的地理位置查询相关的功能,就需要构造一个结构,并且将其类型属性设置为geo_point,此错误明显是由于我们的geo的location字段类型不是geo_point。

**解决方法:**Elasticsearch 支持给索引预定义设置和 mapping(前提是你用的 elasticsearch 版本支持这个 API,不过估计应该都支持)。其实ES中已经有一个默认预定义的模板,我们只要使用预定的模板即可,默认预定义的模板必须只有匹配 logstash-* 的索引才会应用这个模板,所以需要修改索引名字以logstash开头 如下:

output {
        elasticsearch {
        hosts => ["192.168.30.208:9200"]
        index => "logstash-nginx-access-%{+YYYY-MM-dd}"
        }
}

使用高德地图使地图变成中文

编辑配置文件 vim /etc/kibana/kibana.yml 加入如下地址:

tilemap.url: ‘http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}’

重启kibana

编辑可视化图形

 Posted by at 下午2:43  Tagged with:
6月 202018
 

前言

X-pack是elasticsearch的一个扩展包,将安全,警告,监视,
图形和报告功能捆绑在一个易于安装的软件包中,
虽然x-pack被设计为一个无缝的工作,但是你可以轻松的启用或者关闭一些功能。目前6.2及以下版本只能使用免费版,
然而免费版的功能相当少。但是已经有大牛将其破解了,
这里只是站在巨人的肩膀上做一些叙述而已。X-pack 的破解基本思路是先安装正常版本,
之后替换破解的jar包来实现,
目前只能破解到白金版,但已经够用了。

X-pack安装

继上一篇文章中安装ELK之后

阿里云Centos7.4快速安装ELK

安装x-pack

安装方式两种

第一种在线安装(因网络问题,这里选择本地安装)

/usr/share/elasticsearch/bin/elasticsearch install x-pack
/usr/share/kibana/bin/kibana-plugin install x-pack

第二种本地安装

下载相对应版本安装包及安装unzip工具

wget https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.2.4.zip

yum install -y zip unzip

es安装x-pack

/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/x-pack-6.2.4.zip

kibana安装x-pack(时间较久)

安装完成后不要着急访问,首先重置密码

/usr/share/elasticsearch/bin/x-pack/setup-passwords interactive

三个密码都设置成 Test1234@

配置elasticsearch

vim /etc/elasticsearch/elasticsearch.yml

添加如下开启安全选项
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.monitoring.enabled: false

重启es

配置kibana

vim /etc/kibana/kibana.yml

添加es用户密码,不然kibana无法链接es,报错
elasticsearch.username: "elastic"
elasticsearch.password: "Test1234@"

重启kibana

刷新页面,刚刚一共重置了三个用户密码,只有elastic是超级管理员。输入elastic账号密码,

访问es

因配置了用户密码,所以需要加上参数

curl -uelastic:Test1234@ 172.18.241.4:9200

head必须以以下方式访问

http://120.77.40.35:9100/?base_uri=http://120.77.40.35:9200&auth_user=elastic&auth_password=Test1234@

logstash配置

输出到es需要加上账号密码

input {
  file {
    path => "/tmp/access.log"
    type => "nginx"
    start_position => "beginning"
    stat_interval => "2"
  }
}

output {
  elasticsearch {
    hosts => ["172.18.241.4:9200"]
    index => "logstash-nginx-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "Test1234@"
  }

}

破解x-pack

之前x-pack可以免费使用一年,而最新版本中只有一个月的试用期,因为破解比较麻烦,以后再说

 Posted by at 下午4:00  Tagged with: