ELK环境部署


2019年5月8日 14:19 ⋅ 阅读: 99


Elasticsearch +logstash +filebeat+redis+saltstack部署日志平台

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Filebeat隶属于Beats。目前Beats包含四种工具:

Packetbeat(搜集网络流量数据) Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据) Filebeat(搜集文件数据) Winlogbeat(搜集 Windows 事件日志数据)

通过filebeat采集日志到 redis;通过logstash抽取redis日志到es

环境要求

主机 es-1:  kinbana-1 ,head-1,elasticsearch-1
主机 es-2:  elasticsearch-2
主机 es-3:elasticsearch-3,logstash-3
主机 redis-1:redis-server-1

客户端: filebeat

部署配置

官方yum包部署: https://www.elastic.co/downloads

安装java

salt  "*es*" state.sls  saltenv='prod'  jdk.jdk8

elasticsearch (2个master3个data)

salt "*es*" state.sls  saltenv='prod'  elk.elasticsearch.install

/etc/elasticsearch/elasticsearch.yml

node.name: es-1  #本机名称,集群内不可重复
cluster.name: es-cluster #定义集群名称
...
node.master: true #定义是否参与master选举
node.data: true  #定义是否为 data node
systemctl enable  elasticsearch && systemctl start  elasticsearch
# 启动服务
curl -XGET 'http://127.0.0.1:9200/_cat/nodes'
# 查看状态;* es-1 已经推选master

安装redis 收集日志

yum install reids

filebeat采集日志

salt "*web*" state.sls  saltenv='prod'  elk.filebeat.install

logstash 将数据从broker里面抽到es集群

salt "*es*" state.sls  saltenv='prod'  elk.logstash.install

logstash调试

nginx-indexer.conf

output {
  stdout { codec => rubydebug }    #先输出测试一下看看格式
}

调试配置

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx-indexer.conf  -t |grep -i error

/etc/kibana/kibana.yml

tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
#中文地图

kibana安装

kibana 默认没有登录设置,可yum装httpd-tools设置Apache密码认证

salt "*es*" state.sls  saltenv='prod'  elk.kibana.install

vi Gruntfile.js

 server: {
                                options: {
                                        hostname:'172.16.140.XX',
                                        port: 9100,
                                        base: '.',
                                        keepalive: true
                                }

Head插件 安装 nvm -> node nvm install v8.12 npm install -g express git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm install npm install grunt --save npm run start

grunt server & #后台运行

日常查询

通过收集的日志关键字搜索;也可以根据右上角时间轴过滤范围 - Discover 菜单 搜索IP: http_x_forwarded_for : 122.224.xx.xx 搜索IP和域名: http_x_forwarded_for : 122.224.xx.xx AND server_name: dev.ops.com

  • 更多查询
server_name :  device*
# 终端设备
geoip.city_name : haikou
# 城市查询

维护管理

状态

curl -XGET 'http://127.0.0.1:9200/_cat/nodes?v'
# 集群详细状态显示
curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty'
# 集群健康查看

定期删除数据 /opt/es_clean.sh

#!/bin/bash
day3=`date +%Y.%m.%d -d "30 days ago"`
#echo "${day3}"

curl -XDELETE "172.16.1.xx:9200/logstash-nginx-access-${day3}"
curl -XDELETE "172.16.1.xx:9200/packetbeat-6.4.1-${day3}"
curl -XDELETE "172.16.1.xx:9200/tomcat-${day3}"
#清理记录;可 elasticsearch-head查看索引数据

salt管理命令

salt -E "web"  service.stop filebeat
# 服务关闭

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2zhwizy2aa04g