• EFK实现GeoIP定位全球访客

    云和安全管理服务专家 吕涵之原创

    IP地理位置用于确定IP地址的物理位置,可被用于多种实际场景,包括内容个性化与流量分析等等。根据地理位置进行流量分析可帮助大家有效分析自己的用户群体,从而了解用户来自哪里、决定应用服务器的理想地理位置并明确掌握用户定位

    本教程中,我们将共同了解如何利用Fluentd、Kafka、Logstash、Elasticsearch与Kibana配合GeoIP数据库,从而建立应用用户IP地址的可视化地理位置映射,目的效果图如下图所示:

    △访问IP地图

    第一步:Fluentd收集nginx日志

    #配置fluentd

    [root@fluent ~]# vim /etc/td-agent/td-agent.conf

    <source>

    @type tail

    path /var/log/nginx/access_json.log

    pos_file /var/log/nginx/access_json.log.pos

    tag nginx_json.access

    format json

    time_format %d/%b/%Y:%H:%M:%S %z

    </source>

    第二步:将Fluentd收集到的日志存放到kafka

    使用kafka集群做缓存层,而不是直接将agent收集到的日志信息写入logstash节点,让整体结构更健壮。agent负责将收集到的数据写入kafka,logstash取出数据并处理。

    #配置fluentd

    [root@fluent ~]# vim /etc/td-agent/td-agent.conf

    <match nginx_json.access>

    @type kafka2

    brokers 10.0.0.54:9092

    use_event_time true

    <buffer topic>

    @type file

    path /var/log/td-agent/buffer/td

    flush_interval 1s

    </buffer>

    <format>

    @type json

    </format>

    topic_key topic

    default_topic wordsendertest2

    required_acks -1

    compression_codec gzip

    </match>

    第三步:logstash从kafka中取出日志

    Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。

    [root@logstash ~]# vim /etc/logstash/conf.d/kafka_log_es.conf

    input {

    kafka{

    bootstrap_servers => [“10.0.0.55:9092”]

    group_id => “test-consumer-group”

    topics => [“wordsendertest2”]

    codec => json {

    charset => “UTF-8”

    }}}

    第四步:logstash中配置GeoIP解析地理信息

    geoip主要用于kibana绘制地理区域图时使用,原理就是通过一个IP库,根据IP直接获取对应的地理坐标等信息,从而在地图上进行展示。

    [root@logstash ~]# yum install GeoIP-data -y

    [root@logstash ~]# vim /etc/logstash/conf.d/kafka_log_es.conf

    filter{

    if [remote] != “-” {

    geoip {

    source => “remote”

    target => “geoip”

    # database => “/usr/share/GeoIP/GeoIPCity.dat”

    add_field => [ “[geoip][coordinates]”, “%{[geoip][longitude]}” ]

    add_field => [ “[geoip][coordinates]”, “%{[geoip][latitude]}” ]

    }

    mutate {

    convert => [ “[geoip][coordinates]”, “float”]

    }

    }

    }

    第五步:Logstash将处理后的日志传输给es

    Logstash是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch (如下图所示)进行下一步处理。

    [root@logstash ~]# vim /etc/logstash/conf.d/kafka_log_es.conf

    output {

    elasticsearch {

    hosts => [“http://node1.elastic.test.com:9200″,”http://node2.elastic.test.com:9200”]

    index => “logstash-nginx-log-%{+YYYY.MM}”

    codec => “json”

    }

    }

    △elasticsearch web界面

    第六步:kibana展示访问IP地图

    Kibana是一个可视化工具,可以为 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

    △kibana配置索引

    △kibana配置map

    △kibana配置map

    至此,EFK实现GeoIP定位全球访客完成。

    «
    »
以专业成就每一位客户,让企业IT只为效果和安全买单

以专业成就每一位客户,让企业IT只为效果和安全买单