ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并不是所有。html
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。node
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它能够从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它可以以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。git
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不只容许用户建立他们本身的数据的定制仪表板视图,还容许他们以特殊的方式查询和过滤数据github
docker pull elasticsearch:7.6.0 docker pull kibana:7.6.0 docker pull logstash:7.6.0 docker pull filebeat:7.6.0 docker pull mobz/elasticsearch‐head:5
建立一个elk文件夹, 后面的配置文件都放在里面web
mkdir /home/elk
建立一个elasticsearch.yml
文件spring
vi /home/elk/elasticsearch.yml
在里面添加以下配置:docker
cluster.name: "docker-cluster" network.host: 0.0.0.0 # 访问ID限定,0.0.0.0为不限制,生产环境请设置为固定IP transport.host: 0.0.0.0 # elasticsearch节点名称 node.name: node-1 # elasticsearch节点信息 cluster.initial_master_nodes: ["node-1"] # 下面的配置是关闭跨域验证 http.cors.enabled: true http.cors.allow-origin: "*"
建立并启动elasticsearch容器npm
docker run -di -p 9200:9200 -p 9300:9300 --name=elasticsearch -v /home/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.6.0
以后经过9200端口在浏览器上范围,有信息返回则成功bootstrap
注意:若是须要添加插件将容器的插件目录映射到实际的路径中或者经过命令(如安装ik分词器:
docker cp ik elasticsearch:/usr/share/elasticsearch/plugins/
)将其拷贝到容器中centos
这与咱们刚才修改的配置有关,由于elasticsearch在启动的时候会进行一些检查,好比最多打开的文件的个数以及虚拟内存
区域数量等等,若是你放开了此配置,意味着须要打开更多的文件以及虚拟内存,因此咱们还须要系统调优。
修改/etc/security/limits.conf ,添加以下内容:
* soft nofile 65536 * hard nofile 65536
nofile是单个进程容许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
修改/etc/sysctl.conf,追加内容
vm.max_map_count=655360
限制一个进程能够拥有的VMA(虚拟内存区域)的数量
执行下面命令 修改内核参数立刻生效,以后重启服务器和docker服务
sysctl ‐p
ERROR: [1] bootstrap checks failed [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
这个是因为elasticsearch7是集群多节点的版本,须要在elasticsearch.yml中添加以下配置:
# elasticsearch节点名称 node.name: node-1 # elasticsearch节点信息 cluster.initial_master_nodes: ["node-1"]
查看日志发现以下错误
error=>"Elasticsearch Unreachable: [http://192.168.6.128:9200/][Manticore::...
这个问题一般是因为安装在一台机器上的docker容器,防火墙开启的状态下,docker容器内部没法访问宿主机服务(可以访问非宿主机的其余局域网计算机的服务),解决方法:
docker run ‐di ‐‐name=es-head ‐p 9100:9100 mobz/elasticsearch‐head:5
启动成功后访问9100端口便可使用界面化进行管理elasticsearch。
安装依赖
npm install
启动
grunt server
打开浏览器,输入 http://localhost:9100
kibana主要用于对elasticsearch的数据进行分析查看。注意选择的版本必须和elasticsearch的版本相同或者低,建议和elasticsearch的版本相同,不然会没法将没法使用kibana。
建立一个kibana.yml
配置文件,在里面编写以下配置:
server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://elasticsearch的IP:9200"] # 操做界面语言设置 i18n.locale: "zh-CN"
建立并启动kibana容器
docker run -di --name kibana -p 5601:5601 -v /home/elk/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.6.0
启动成功后访问5601端口便可进入kibana管理界面。(进入后要求选择配置,直接选择本身浏览便可)
这个先安装logstash后再回过来操做;输入log*
便可选择logstash的日志信息,建立成功后便可查看日志信息
建立一个logstash.conf
配置文件,在里面添加以下配置:
input { tcp { port => 5044 codec => "plain" } } filter{ } output { # 这个是logstash的控制台打印(进行安装调试的开启,稍后成功后去掉这个配置便可) stdout { codec => rubydebug } # elasticsearch配置 elasticsearch { hosts => ["elasticsearch的IP:9200"] } }
建立和启动logstash容器
docker run -di -p 5044:5044 -v /home/elk/logstash.conf:/usr/share/logstash/pipeline/logstash.conf --name logstash logstash:7.6.0
添加maven依赖
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.3</version> </dependency>
下面以springboot中logback做为日志处理,配置文件(logback-spring.xml
)配置信息以下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}.%M.%L) - %highlight(%msg) %n</pattern> </layout> </appender> <!--logback输出--> <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>192.168.6.128:5044</destination> <includeCallerData>true</includeCallerData> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <includeCallerData>true</includeCallerData> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80}.%M.%L - %msg %n</pattern> </providers> </encoder> </appender> <root level="INFO"> <!--本地开发调试将控制台输出打开,同时将日志文件输出关闭,提升日志性能;线上部署请务必将控制台输出关闭--> <appender-ref ref="STDOUT"/> <appender-ref ref="STASH"/> </root> </configuration>