前言:
如果出现kibana界面一直处于 server is not ready yet
请在es-head界面删除.kibana,之后重启kibana,我卡在这里好久,折腾了半天才搞定,这次选择安装包的方式,费了不少时间。
我之前用docker镜像安装的elk就挺好的,kibana启动很顺利,选择docker镜像启动的方式推荐。
ELK的概念
ELK官网:http://www.elastic.co/
ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。
Elasticsearch是个基于Lucence,开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
原文链接:https://blog.csdn.net/xixlxl/article/details/80502611
Beats 是elastic公司开源的一款采集系统监控数据的代理agent,是在监控服务器上以客户端形式的 数据收集器的统称,可以直接把数据发送给Elasticsearch或者通过Logstash发送给Elasticsearch,然后进行后续的数据分析活动
Beats由如下功能:
? Packetbeat:是一个网络数据包分析器,用于监控,收集网络流量信息,Packbeat嗅探服务器之间的流量;
? Filebeat:用于监控,收集服务器日志文件,其以取代logstash fowarder;
? Metricbeat:可以后去外部系统的监控信息,其可以监控,收集Apache,HAProxy,MongoDB,MySQL,Nginx,Redis,System,Zookeeper等服务
ELK常见的架构
1 Elasticsearch + Logstash + Kibana
这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。
2 Elasticsearch + Logstash + filebeat + Kibana
与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。
3 Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如kafka) + Kibana
这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。目前我司使用的就是这种架构,我个人也比较推荐这种方式。
ELK的部署
下载地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | jdk环境准备 yum install -y java java -version #openjdk version "1.8.0_242" #OpenJDK Runtime Environment (build 1.8.0_242-b08) #OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode) 官网下载地址ELK https://www.elastic.co/cn/downloads/elasticsearch 清华源elk下载地址 https://mirrors.tuna.tsinghua.edu.cn/elasticstack 譬如下载7.5.2版本如下 #elasticsearch 安装包 rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.5.2/elasticsearch-7.5.2-x86_64.rpm #filebeat 安装 安装在客户端 rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.5.2/filebeat-7.5.2-x86_64.rpm #kibana 安装 rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.5.2/kibana-7.5.2-x86_64.rpm #logstash 安装 rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.5.2/logstash-7.5.2.rpm |
物理机安装ELK
elasticsearch配置文件修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #默认文件配置 vim /etc/elasticsearch/elasticsearch.yml cat /etc/elasticsearch/elasticsearch.yml |grep -E -v "#" cat /etc/elasticsearch/elasticsearch.yml | egrep -v "#" cat >elasticsearch.yml<<EOF node.name: k8s-2 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 10.10.0.30 http.port: 9200 http.cors.enabled: true http.cors.allow-origin: "*" EOF ##锁定内存失败解决方案,修改启动文件 vim /usr/lib/systemd/system/elasticsearch.service #添加 一行 [server] LimitMEMLOCK=infinity # systemctl daemon-reload && systemctl restart elasticsearch && systemctl status elasticsearch |
kibana修改配置文件
1 2 3 4 5 6 7 8 9 10 11 | cat /etc/kibana/kibana.yml |grep -E "^\w" server.port: 5601 server.host: "10.10.0.22" elasticsearch.hosts: ["http://10.10.0.22:9200"] kibana.index: ".kibana" i18n.locale: "zh-CN" systemctl start kibana && systemctl status kibana Es 进入删除.kibana kibana重新启动 |
filebeat配置文件
fvim /etc/filebeat/filebeat.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | filebeat.inputs: ####################nginx############### - type: log enabled: true paths: - /opt/nginx116/logs/access.log json.keys_under_root: true json.overwrite_keys: true tags: ["access"] - type: log enabled: true paths: - /opt/nginx116/logs/error.log tags: ["error"] ####################tomcat############## - type: log enabled: true paths: - /var/log/tomcat/localhost_access_log.*.txt json.keys_under_root: true json.overwrite_keys: true tags: ["tomcat"] ##################es################### - type: log enabled: true paths: - /var/log/elasticsearch/elasticsearch.log multiline.pattern: '^\[' multiline.negate: true multiline.match: after tags: ["elasticsearch"] #################docker################ - type: log enabled: true paths: - /var/lib/docker/containers/558c91f2842aa778a991b844a0d635f12018740d04f8cd8278fed9ff0a04fb17/558c91f2842aa778a991b844a0d635f12018740d04f8cd8278fed9ff0a04fb17-json.log json.keys_under_root: true json.overwrite_keys: true tags: ["docker-nginx"] ##################output############### set.kibana: host: "10.10.0.22:5601" output.elasticsearch: hosts: ["10.10.0.22:9200"] indices: - index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}" when.contains: tags: "access" - index: "nginx-error-%{[beat.version]}-%{+yyyy.MM}" when.contains: tags: "error" - index: "tomcat%{[beat.version]}-%{+yyyy.MM}" when.contains: tags: "tomcat" - index: "elasticsearch%{[beat.version]}-%{+yyyy.MM}" when.contains: tags: "elasticsearch" - index: "docker-nginx%{[beat.version]}-%{+yyyy.MM}" when.contains: stream: "stdout" - index: "docker-nginx-error%{[beat.version]}-%{+yyyy.MM}" when.contains: stream: "stderr" setup.template.name: "nginx" setup.template.pattern: "nginx-*" setup.template.enabled: false setup.template.overwrite: true |
本次笔者用的是filebeat6版本,fielbeat 7版本beat.version->agent.version,可以参考官方文档
filebeat json格式
1 2 3 4 5 6 7 8 | #keys_under_root可以让字段位于根节点,默认为false json.keys_under_root: true #对于同名的key,覆盖原有key值 json.overwrite_keys: true #message_key是用来合并多行json日志使用的,如果配置该项还需要配置multiline的设置,后面会讲 json.message_key: message #将解析错误的消息记录储存在error.message字段中 json.add_error_key: true |
Elasticsearch API
- 集群状态:http://10.10.0.22:9200/_cluster/health?pretty
- 节点状态:http://10.10.0.22:9200/_nodes/process?pretty
- 分片状态:http://10.10.0.22:9200/_cat/shards
- 索引分片存储信息:http://10.10.0.22:9200//index/_shard_stores?pretty
- 索引状态:http://10.10.0.22:9200//index/_stats?pretty
- 索引元数据:http://10.10.0.22:9200//index?pretty
安装es插件
1 2 3 | docker pull alivv/elasticsearch-head docker run -it -p9100:9100 --name es-head alivv/elasticsearch-head |
1 |