ELK由Elasticsearch、Logstash和Kibana三部分组件组成;
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana: web化接口用作查寻和可视化日志;
5601 kibana
5044 Logstash
9200 es
操作0,分别搭建
解决 x-pack 问题(安全的)
echo "network.host: 0.0.0.0
xpack:
ml.enabled: false
monitoring.enabled: false
security.enabled: false
watcher.enabled: false
" >>elasticsearch.yml
分别 pull 镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.4.3
docker pull docker.elastic.co/logstash/logstash:6.4.3
docker pull docker.elastic.co/kibana/kibana:6.4.3
创建文件
运行
docker run --rm -it -p 9200:9200 -p 9300:9300 -v "$PWD"/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml docker.elastic.co/elasticsearch/elasticsearch:6.4.3
docker run --rm -it -v "$PWD"/logstash/pipeline/:/usr/share/logstash/pipeline/ -v "$PWD"/logstash/config/:/usr/share/logstash/config/ docker.elastic.co/logstash/logstash:6.4.3 # 在输入中:输入的日志文件使用/usr/share/logstash/pipeline/logs/test.log,只需将日志文件放入pipeline/logs/下,或者手动映射进容器即可。另外输入文件路径支持模糊匹配。在过滤器中定义了去掉消息中的换号符号,以及定义了消息格式。这里的消息格式自定义方法参阅:https://www.elastic.co/guide/en/logstash/6.4/filter-plugins.html
docker run --rm -it -p 5601:5601 -v "$PWD"/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml docker.elastic.co/kibana/kibana:6.4.3
创建文件
echo "config:
reload:
automatic: true
interval: 3s
xpack:
management.enabled: false
monitoring.enabled: false
"> logstash/config/logstash.yml
echo "- pipeline.id: test
path.config: "/usr/share/logstash/pipeline/logstash-test.conf"
"> logstash/config/pipelines.yml
echo "input {
file {
path => ["/usr/share/logstash/pipeline/logs/test.log"]
start_position => "beginning"
}
}
filter {
mutate {
gsub => ["message", "
", ""]
}
dissect {
mapping => {"message" => "%{date} %{+date} [%{task} %{+task}] [%{type}] %{class} - %{info}"}
}
}
output {
elasticsearch { hosts => ["127.0.0.1:9200"] }
stdout { codec => rubydebug }
} "> logstash/pipeline/logstash-test.conf.yml
mkdir -p kibana/config
echo "server.host: "0.0.0.0"
elasticsearch.url: http://127.0.0.1:9200
xpack:
apm.ui.enabled: false
graph.enabled: false
ml.enabled: false
monitoring.enabled: false
reporting.enabled: false
security.enabled: false
grokdebugger.enabled: false
searchprofiler.enabled: false
">kibana/config/kibana.yml
问题
启动es报错
操作1,现成版
下载镜像
运行容器
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -e ES_MIN_MEM=128m -e ES_MAX_MEM=1024m -it --name elk sebp/elk
运行成功
进入交互模式
FAQ
- [2019-04-08T10:39:19,982][ERROR][o.e.b.Bootstrap ] [bh2HKsP] node validation exception
[1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2019-04-08T10:39:20,005][INFO ][o.e.n.Node ] [bh2HKsP] stopping ...
[2019-04-08T10:39:20,059][INFO ][o.e.n.Node ] [bh2HKsP] stopped
[2019-04-08T10:39:20,059][INFO ][o.e.n.Node ] [bh2HKsP] closing ...
[2019-04-08T10:39:20,077][INFO ][o.e.n.Node ] [bh2HKsP] closed
解决:调整参数即可
- sysctl: setting key "vm.max_map_count": Read-only file system
解决:https://blog.csdn.net/Gamer_gyt/article/details/52960941
修改宿主机本身的配置文件,然后重新启动镜像,也能解决问题,退出容器,返回到宿主机
修改vm.max_map_count 可以通过命令行修改,但是在机器重启时会失效,所以通过修改配置文件来解决问题
命令行修改办法:
sudo sysctl -w vm.max_map_count=655360
并用以下命令查看是否修改成功
sysctl -a | grep “vm.max_map_count”
修改配置文件:
sudo vim /etc/sysctl.conf
加入:
vm.max_map_count=262144
保存即可
接下来解决
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
这个问题
sudo vim /etc/security/limits.conf
加入以下两行:
redhat hard nofile 65536
redhat soft nofile 65536
1
2
redhat这里为用户名
然后重启启动elasticsearch即可
参考
【原生推荐】在 CentOS7 安装 ELK
http://www.cnblogs.com/cheesebar/p/9126171.html
【docker 推荐】基于Docker的ELK日志平台搭建
https://www.cnblogs.com/devinzhang/p/6962404.html
【docker 推荐,10分钟搭建 ok】使用Docker安装ELK系列(超简单)
https://www.cnblogs.com/hackyo/p/9951684.html
【9.5分,拿来即用】Docker ElK安装部署使用教程
https://www.cnblogs.com/soar1688/p/6849183.html