简介
ELK开源日志框架同数据 https://www.elastic.co
- Elasticsearch 是一个基于JSON的分布式搜索和分析引擎
- Logstash 是动态数据搜集管道,拥有可扩展的插件生态系统
- Kibana 可以让您的数据变得有形有样,是一个可扩展的用户界面
官网docker指导地址
- Elasticsearch+Kibana https://www.elastic.co/guide/en/kibana/current/docker.html#docker
- Logstash
https://www.elastic.co/guide/en/logstash/current/docker.html
ELK搭建
下载镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.13.4
docker pull docker.elastic.co/kibana/kibana:7.13.4
docker pull docker.elastic.co/logstash/logstash:7.13.4
Elasticsearch + Kibana
创建网络 docker network create elastic
查看已有网络 docker network ls
若后续要删除网络,使用docker network rm <网络名>
新建配置文件 /root/elk/elasticsearch/elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*
启动Elasticsearch docker run --name es01-test --net elastic -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" -e "discovery.type=single-node" -v /root/elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml docker.elastic.co/elasticsearch/elasticsearch:7.13.4
ES启动成功后,输入<ip>:9200
应该要能看到类似下面的输出
启动Kibana docker run --name kib01-test --net elastic -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es01-test:9200" docker.elastic.co/kibana/kibana:7.13.4
问题1:ES启动失败
ES启动不久后自动退出,无任何报错
容器虚拟内存空间给小了,至少需要262144
vim /etc/sysctl.conf
//在最后一行上加上
vm.max_map_count=262144
执行 sysctl -p
可以查看是否配置成功。如果还是没成功,则检查启动命令是否含有ES_JAVA_OPTS
参数来设置Xms和Xmx
问题2:
ES启动成功,但访问Kibana时,报500错误
可以使用docker exec -it es01-test bash
进入容器中。配置文件路径为 /usr/share/elasticsearch/config/elasticsearch.yml
修改配置文件,在末尾加上 action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*
由于容器中一般没装vi编辑器,因此可以使用echo命令进行追加,例如 echo "action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*" >> config/elasticsearch.yml
这是为elasticsearch增加自动创建索引功能(这里的索引,就是 Logstash 配置文件 input 里面的 type)
也可以在外部编写配置文件,之后挂载至容器中
修改完后,先重启elasticsearch(docker restart es01-test
),再重启kibana(docker restart kib01-test
)
此时启动,docker不会在前台,而会转为在后台运行容器。因此,如果需要查看容器日志,可以使用 docker logs <容器名>
或 docker logs <容器ID>
Logstash
Logstash主要作用是收集日志,这个组件有很多插件,可以支持大部分日志集成方式,如tcp、udp、jdbc、文件、队列等
启动方式
首先,创建 /root/logstash/logstash.yml
文件,输入如下内容
path.config: /usr/share/logstash/conf.d/logstash.conf
path.logs: /var/log/logstash
然后,创建 /root/logstash/conf.d/logstash.conf
文件,输入如下内容
input {
std {}
file {
path => "/tmp/log/syslog"
type => "log"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["http://es01-test:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
stdout {codec => rubydebug}
}
使用 ls -lt /var/log
命令,可以将系统日志,按修改时间排序,并列出详细信息。我们先使用系统日志作为输入
使用docker启动logstash镜像
docker run --name logstash01-test -it --rm -p 5044:5044 --net elastic -v /var/log/secure:/tmp/log/syslog -v /root/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/elk/logstash/conf.d/:/usr/share/logstash/conf.d/ docker.io/logstash:7.13.4
使用如下命令进入容器内部,可以查看配置文件的范例
docker exec -it logstash01-test bash
cat /usr/share/logstash/config/logstash-sample.conf
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
查看Elastic网页
访问地址 http://<ip>:5601/app/home#/
,5601是创建elasticsearch容器时的端口号
单击左侧“三杠”,展开左侧面板
- 创建索引 Management —> Stack Management —> Kibana —> Index Patterns
- 查看日志 Analytics —> Discover
使用Log4j将日志送到ELK
import org.apache.log4j.Logger;
public class ElkLog4jDemo {
private static final Logger logger = Logger.getLogger(ElkLog4jDemo.class);
public static void main(String[] args) throws Exception {
logger.debug("使用Log4j发送日志给ELK")
}
}