ELK搭建以及简单使用

ELK搭建以及简单使用

ELK简介

ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称, 市面上也被成为Elastic Stack。
其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架, 简称Elasticsearch为es。
Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。
Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。


基于Docker搭建ELK

  • 拉取镜像

根据官方要求: elasticsearch版本不能低于kibana版本, 这里选择7.3.2

root@iZ2ze26pixxe9t9kmg6tvhZ:/# docker pull elasticsearch:7.3.2
root@iZ2ze26pixxe9t9kmg6tvhZ:/# docker pull kibana:7.3.2
root@iZ2ze26pixxe9t9kmg6tvhZ:/# docker pull logstash:7.3.2

ElasticSearch搭建

  • 创建elasticsearch容器

以单节点的形式启动elasticsearch

root@iZ2ze26pixxe9t9kmg6tvhZ:/# docker run -d -p 9200:9200 -p 9300:9300 --name myelasticsearch -e "discovery.type=single-node" elasticsearch:7.3.2                                    
  • 检查elasticsearch状态
root@iZ2ze26pixxe9t9kmg6tvhZ:/# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                            NAMES
0e902674d7e8        elasticsearch:7.3.2          "/usr/local/bin/dock…"   25 minutes ago      Up 25 minutes       0.0.0.0:9300->9300/tcp, 0.0.0.0:9200->9200/tcp   myelasticsearch

访问http://ip:9200得到es默认响应报文, es启动成功

{
  "name" : "0e902674d7e8",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "UQbdIjrHQw6SzDC317aMlA",
  "version" : {
    "number" : "7.3.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "1c1faf1",
    "build_date" : "2019-09-06T14:40:30.409026Z",
    "build_snapshot" : false,
    "lucene_version" : "8.1.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Kibana搭建

  • 创建kibana容器

映射端口到宿主机的6004端口

root@iZ2ze26pixxe9t9kmg6tvhZ:/# docker run -d -p 5601:5601 --name mykibana kibana:7.3.2 
  • 进入kibana容器修改配置
root@iZ2ze26pixxe9t9kmg6tvhZ:/# docker exec -it mykibana /bin/bash
bash-4.2$ ls
LICENSE.txt  NOTICE.txt  README.txt  bin  built_assets	config	data  node  node_modules  optimize  package.json  plugins  src	webpackShims  x-pack
bash-4.2$ vi /usr/share/kibana/config/kibana.yml 

配置文件内容修改为:

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
# elasticsearch地址
elasticsearch.hosts: [ "http://172.18.0.1:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

# 启用简体中文
i18n.locale: "zh-CN"
  • 检查kibana状态

访问http://ip:5601, 可以看到kibana页面(首次初始化需要一定的时间)
image.png


LogStash搭建

  • 创建logstash配置文件
root@iZ2ze26pixxe9t9kmg6tvhZ:/home# mkdir logstash
root@iZ2ze26pixxe9t9kmg6tvhZ:/home# cd logstash
root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash# 
root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash# vim logstash.yml

logstash配置文件内容:

path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash
  • 创建logstash导入.log日志文件的配置文件目录conf.d

其中/home/logstash/conf.d目录存储*.conf配置文件
/home/logstash/conf.d/logs目录存储需要导入es的日志文件

root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash# 
root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash# mkdir conf.d
root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash# cd conf.d
root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash/conf.d# mkdir logs
root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash/conf.d# vim test.conf

test.conf配置文件内容:

input {
        file {
                path => "/usr/share/logstash/conf.d/logs/*.log"
                type => "web_log"
                start_position => "beginning"
        }
}
output {
        elasticsearch {
                hosts => ["172.18.0.1:9200"]
                index => "myblog_logs"
        }
}
  • 复制需要导入的.log日志文件到/home/logstash/conf.d/logs目录下

  • 启动logstash容器

挂载logstash.yml配置文件, 挂载配置目录(conf.d)和配置文件(logstash.yml)

root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash# docker run -d -p 5044:5044 --name mylogstash -v /home/logstash/conf.d/:/usr/share/logstash/conf.d/ -v /home/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:7.3.2
root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash#
  • 查看logstash启动状态
root@iZ2ze26pixxe9t9kmg6tvhZ:/home/logstash# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                            NAMES
8aa253f66622        logstash:7.3.2               "/usr/local/bin/dock…"   26 seconds ago      Up 25 seconds       0.0.0.0:5044->5044/tcp, 9600/tcp                 mylogstash
08a25d18a004        elasticsearch:7.3.2          "/usr/local/bin/dock…"   11 days ago         Up 27 minutes       0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   myelasticsearch
fc98b0bbe6d5        kibana:7.3.2                 "/usr/local/bin/dumb…"   11 days ago         Up 27 minutes       0.0.0.0:5601->5601/tcp                           mykibana

此时再去kibana页面的管理->索引管理, 可以看到刚刚test.conf配置导入的名为myblog_logs的索引
image.png

  • 从mysql数据库导入数据到es

在logstash挂载的配置目录创建配置文件halo.conf
配置内容如下:

input {
    stdin {
    }
    jdbc {
      # mysql 数据库链接地址
      jdbc_connection_string=>"jdbc:mysql://172.18.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"
      # 用户名和密码
      jdbc_user => "root"
      jdbc_password => "root"
      # mysql驱动包路径(需要下载mysql驱动包, 必须放在此目录)
      jdbc_driver_library=>"/usr/share/logstash/logstash-core/lib/jars/mysql-connector-java-8.0.19.jar"
      # 驱动类名
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      # 执行的sql文件路径+名称
      statement_filepath => "/usr/share/logstash/conf.d/halo.sql"
      # 设置监听间隔  各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
      # 索引类型
      type => "item"
    }
}

filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}

output {
    elasticsearch {
	# es的地址
        hosts => ["172.18.0.1:9200"]
	# 要出现在es中的索引名
        index => "halo_logs"
        document_id => "%{id}"
    }
    stdout {
        codec => json_lines
    }
}

同时在此目录下再创建halo.sql文件, 文件内容如下:

select 
*
from logs

最后下载halo.conf配置文件中指定的mysql驱动包, 放到容器中指定的目录下.

重启容器

在logstash容器的控制台日志可以看到数据已经开始导入到es
image.png

同时, 在kibana页面可以看到新出现的halo_logs索引
image.png


Kibana的使用

todo