使用logstash收集docker容器产生的日志,并对日志过滤、处理等,最后上传到elasticsearch”存储库“中,kibana进行可视化管理,让用户在Elasticsearch中使用图形和图表对数据进行可视化。
在安装ELK之前,首先确保主机安装java 1.8.0以上版本(java -version),如果没有的话,通过apt install进行安装。如果只想在docker中运行Elk,跳过本地安装elk的方法,请直接下拉至Run ElkStack on Docker。
# download and install the public signing key
wget -qO - https://artifacts.elastic.co/GPE-KEY-elasticsearch | sudo apt-key add -
# install the apt-transport-https package on debian
sudo apt-get install apt-transport-https
# save the repository definition to /etc/apt/sources.list.d/elastic-7.x.list
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install logstash
##### 配置logstash.conf
在/etc/logstash/conf.d/目录下,添加配置文件
此处超链接为官方文档用以参考
Configuring Logstash
本文档中的配置文件仅供参考,请使用ctrl+F寻找logstash-simple.conf
注:在filter中使用正则,注意需要双引号时,将双引号用单引号包起来( ‘ ” ’ )。
# download and install the public signing key:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo apt-get update && sudo apt-get install kibana
首先假设电脑上已经有docker,且已经安装了docker-compose,如果没有安装docker-compose,参考一下命令。
# Linux 64直接下载编译好的二进制文件
sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 给二进制文件可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
我们使用docker-compose来代替命令行启动镜像的方式(docker run --…)。在这里我们使用docker-compose分别启动logstash、elasticsearch、kibana三个镜像,并对其运行条件进行配置。
docker pull docker.elastic.co/logstash/logstash:7.4.2
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.4.2
docker pull docker.elastic.co/kibana/kibana:7.4.2
这是一个漫长的过程,由于elastic镜像源总是连接不稳定。我找到了网上推荐的镜像库,供参考(能供官方的还是使用官方提供的镜像)
# vi /etc/docker/daemon.json 添加以下信息
{
...
"registry-mirrors": [
"https://dockerhub.azk8s.cn", # Azure中国镜像
"https://reg-mirror.qiniu.com", # 七牛云加速器
"https://regisrty.docker-cn.com", # docker国内官方源
"http://hub-mirror.c.162.com", # 网易镜像
"https://docker.mirrors.ustc.edu.cn", # 中科大
"https://cr.console.aliyun.com/" # 阿里镜像
]
...
}
直接上文档:
version: '3.5'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
container_name: es01
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
#- certs: $CERTS_DIR
ports:
- 9200:9200
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.4.2
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://elasticsearch:9200
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- elastic
logstash:
image: docker.elastic.co/logstash/logstash:7.4.2
container_name: logt
ports:
- 127.0.0.1:12201:12201/udp
environment:
ES_URL_LOGSTASH: http://elasticsearch:9200
# 映射logstash的配置文件
volumes:
- ./elk_stack/logstash/conf/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./elk_stack/logstash/conf/logstash-simple.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
networks:
- elastic
volumes:
data01:
driver: local
networks:
elastic:
name: elastic
driver: bridge
注:由于docker-compose高版本将不支持links,故使用networks将ELK设置为统一网段,但并不能代替links所有功能,有需要请参考官方文档
logstash.yml
# 0.0.0.0为官网配置
# http.host: 0.0.0.0
http.host: 127.0.0.1
xpack.monitoring.elasticsearch.hosts:
- http://elasticsearch:9200
xpack.monitoring.enabled: true
logstash-simple.conf
input {
gelf{
use_udp => true
port_udp => 12201
id => "my_plugin_id"
}
}
filter { } # 因事而异
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => "${ES_URL_LOGSTASH}" # 若logstash做单独使用,而非docker-compose方式,请按该参数所对应的hosts修改
index => "logstash-%{+yyyy.MM.dd}"
}
}
注:将logstash-simple.conf的input,docker networks,日志发送方发送时的hosts保持一致。
使用curl http://localhost:9200
检测elasticsearch是否运行成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-msoiFDpx-1576634623194)(C:\Users\liuhq\AppData\Roaming\Typora\typora-user-images\image-20191203181503394.png)]
docker run --log-driver gelf --log-opt gelf-address=udp://localhost:12201 --network=elastic --name=test001 <image-name>
此时进入正在运行的容器logt可以看到stdout的输出
docker attach logt
–log-driver gelf --log-opt gelf-address=udp://localhost:12201 --network=elastic --name=test001
此时进入正在运行的容器logt可以看到stdout的输出
```bash
docker attach logt
打开Elk所在主机的浏览器,输入localhost:5601
点击右下角Management按钮,在Kibana下点击Index Patterns,Creat index pattern,如果Kibana检测到已经存在Index会自动列出,此时输入与之对应的Index-name-创建Index(在本文档中使用为logstash-@timestamp)。具体参考官方文档 (创建索引) 和 另一个 官方文档 (检索)。