张坤的个人博客

  • 首页
  • 分类
  • 标签
  • 日志

  • 搜索
Jenkins RabbitMQ Zookeeper IDEA Logstash Kibana ELK NIO Netty Spring Cloud Golang DataX Elasticsearch React Native Mysql H2 Socket Spring Boot Kafka Mybatis Sqlmap Vue Postgresql Docker Vert.x Flutter Flink Redis

ELK深入浅出

发表于 2020-06-27 | 分类于 ELK | 0 | 阅读次数 40

ELK是Elasticsearch、Logstash、Kinaba三个产品的简称。

  • Elasticsearch:数据存储与检索
  • Logstash:数据收集与分析
  • Kinaba:数据可视化

环境Centos7,Docker

Elasticsearch安装

首先用Docker拉取Elasticsearch镜像,版本用的是6.8.8

docker pull elasticsearch:6.8.8

创建容器

docker run -itd --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.8 -v ~/elasticsearch.yml:/usr/share/elasticsearch/elasticsearch.yml

安装IK中文分词器

如果不需要中文分词,可以跳过这一步
进入到elasticsearch容器中,使用elasticsearch-plugin命令安装插件

docker exec -it es /bin/bash
bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.8/elasticsearch-analysis-ik-6.8.8.zip

ES配置

然后再到~/elasticsearch.yml下修改配置

# 集群名称
cluster.name: "docker-cluster"
network.host: 0.0.0.0

# elasticsearch-head访问需要允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

然后重启服务即可生效

Logstash安装

docker pull logstash:6.8.8
docker run -itd --name logstash --link es:elasticsearch -v ~/pipeline/:/usr/share/logstash/pipeline logstash:6.8.8

es是ES容器的名称,用--link将其取个别名(elasticsearch)映射到logstash容器上,logstash容器可以通过elasticsearch访问ES容器,把elasticsearch作为ES容器的IP。

宿主机~/pipeline目录里面可以自定义conf文件,每一个conf文件就是一个logstash收集数据的任务。
配置文件格式:

input { #输入
	...
}

filter { #过滤,对数据进行分割、截取等处理 
	... 
}

output { #输出 
	...
}

input是数据来源,filter可以对数据进行过滤和分析,output确定数据的目的地。
举个简单例子:

input {
	 stdin { }
}

output  
	stdout { }
}

监听控制台的输入,然后输出到控制台

收集系统日志到ES

以监听本地文件为例,收集到的日志存储到ES上,index名称system-log-{yyyy.MM.dd}
在宿主机~/pipeline目录下新建个收集任务(创建system.conf文件)

input { 
  file {
    path => "/usr/share/logstash/data/a.log"
    start_position => "beginning"
  }
} 

filter {
  mutate {
    split => {"message" => "|"}
  }
}

output { 
  elasticsearch {
    hosts => "elasticsearch:9200"
    index => "system-log-%{+YYYY.MM.dd}"
  }
}
  • input中收集类型为file,path指向文件路径,注意这里是docker容器中的文件路径而不是宿主机的。如果需要监听宿主机请用-v挂载目录。start_position指定从第一行位置。
  • filter作为过滤器只做一件事,就是把每行的日志以|作为分隔符分割
  • output指定输出的目的地是ES,hosts也可以是个数组(如hosts => ["elasticsearch:9200"]),指向多个es,elasticsearch是es容器的别名,可以把它作为ip使用。index指定当前日志写入到system-log-开头当前日期的index上去。

添加或修改logstash收集任务需要重启logstash服务。

进入logstash容器中,用echo向a.log追加一条数据

echo "20080323|张三|男" >> a.log

需要注意的是,这里发送的类型默认是text类型,如果写成2008-03-23会被当做Date类型,导致上传失败,报400错误。

先确定当前机器时间正确,如果不正确可以用ntpdate工具同步下时间

# 安装ntpdate工具
yum -y install ntp ntpdate
# 设置系统时间与网络时间同步
ntpdate cn.pool.ntp.org
# 将系统时间写入硬件时间
hwclock --systohc

用date命令查看当前时间
image.png

上传成功之后打开Kibana会发现ES上多了一个system-log-2020.06.27的index
image.png

Kibana安装

docker pull kibana:6.8.8
docker run -itd --name kibana --link es:elasticsearch -p 5601:5601 kibana:6.8.8

Kibana中文界面显示

进入到Kibana容器,修改/usr/share/kibana/config/kibana.yml配置文件,添加这一行配置,就可以将kibana界面换成中文了。

i18n.locale: "zh-CN"

然后重启Kibana容器

可以用elasticsearch-head来查看ES的数据,现在用Kibana演示下。
依次点击 管理 -> 索引模式 -> 创建索引模式,然后将system-log-2020.06.27这个索引名复制到输入框中,点击下一步
image.png

直接选“我不想使用时间筛选”然后创建就行了。

创建成功之后在 Discover 发现我们刚刚创建的索引模式,可以选中它来查看当前index中存储的数据。
image.png
在message字段这里可以看到我们发送的数据。

# Jenkins # RabbitMQ # Zookeeper # IDEA # Logstash # Kibana # ELK # NIO # Netty # Spring Cloud # Golang # DataX # Elasticsearch # React Native # Mysql # H2 # Socket # Spring Boot # Kafka # Mybatis # Sqlmap # Vue # Postgresql # Docker # Vert.x # Flutter # Flink # Redis
编解码器使用
IDEA连接远程Docker环境运行Dockerfile
  • 文章目录
  • 站点概览
会Coding的猴子

会Coding的猴子

57 日志
19 分类
28 标签
RSS
Github
Creative Commons
© 2021 会Coding的猴子
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4

湘ICP备18011740号