elk:日志搜集平台
ELK由ElasticSearch、Logstash和Kibana三个开源工具组成:
1、Elasticsearch:
ElasticSearch是一个基于Lucene的开源分布式搜索服务。只搜索和分析日志 。
特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,多数据源等。它提供了一个分布式多用户能力的全文搜索引擎。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 在elasticsearch中,所有节点的数据是均等的。
索引:
索引(库)-->类型(表)-->文档(记录)
2、Logstash:
Logstash是一个完全开源工具,可以对你的日志进行收集、过滤、分析,并将其存储供以后使用(如,搜索),logstash带有一个web界面,搜索和展示所有日志。 只收集和过滤日志,和改格式
简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供很多功能强大的滤网以满足你的各种应用场景。
Logstash的事件(logstash将数据流中等每一条数据称之为一个event)处理流水线有三个主要角色完成:inputs –> filters –> outputs:
logstash整个工作流分为三个阶段:输入、过滤、输出。每个阶段都有强大的插件提供支持:
Input 必须,负责产生事件(Inputs generate events),常用的插件有
file 从文件系统收集数据
syslog 从syslog日志收集数据
redis 从redis收集日志
beats 从beats family收集日志(如:Filebeats)
Filter常用的插件,负责数据处理与转换(filters modify them)
grok是logstash中最常用的日志解释和结构化插件。:grok是一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具。mutate 支持事件的变换,例如重命名、移除、替换、修改等
drop 完全丢弃事件
clone 克隆事件
output 输出,必须,负责数据输出(outputs ship them elsewhere),常用的插件有
elasticsearch 把数据输出到elasticsearch
file 把数据输出为普通的文件
3、Kibana:
Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志。
所有机器关闭防火墙,selinux
Elasticsearch: 6.5.4 #https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz Logstash: 6.5.4 #https://artifacts.elastic.co/downloads/logstash/logstash-6.5.4.tar.gz Kibana: 6.5.4 #https://artifacts.elastic.co/downloads/kibana/kibana-6.5.4-linux-x86_64.tar.gz Kafka: 2.11-2.1 #https://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz Filebeat: 6.5.4相应的版本最好下载对应的插件
相关地址:
官网地址:https://www.elastic.co
官网搭建:https://www.elastic.co/guide/index.html
一、 Elasticsearch部署
1、安装配置jdk8
ES运行依赖jdk8 -----三台机器都操作,先上传jdk1.8
[root@mes-1 ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/ [root@mes-1 ~]# cd /usr/local/ [root@mes-1 local]# mv jdk1.8.0_191/ java [root@mes-1 local]# echo ' JAVA_HOME=/usr/local/java PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH ' >>/etc/profile [root@mes-1 ~]# source /etc/profile [root@mes-1 local]# java -version java version "1.8.0_211" Java(TM) SE Runtime Environment (build 1.8.0_211-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)2、安装配置ES----只在第一台操作操作下面的部分
(1)创建运行ES的普通用户
[root@mes-1 ~]# useradd else [root@mes-1 ~]# echo "123456" | passwd --stdin "else"(2)安装配置ES
[root@mes-1 ~]# tar xzf elasticsearch-6.5.4.tar.gz -C /usr/local/ [root@mes-1 ~]# cd /usr/local/elasticsearch-6.5.4/config/ [root@mes-1 config]# ls elasticsearch.yml log4j2.properties roles.yml users_roles jvm.options role_mapping.yml users [root@mes-1 config]# cp elasticsearch.yml elasticsearch.yml.bak [root@mes-1 config]# vim elasticsearch.yml ----找个地方添加如下内容 cluster.name: elk node.name: elk01 node.master: true node.data: true path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 0.0.0.0 http.port: 9200 #discovery.zen.ping.unicast.hosts:["192.168.246.234","192.168.246.231","192.168.246.235"] #discovery.zen.minimum_master_nodes: 2 #discovery.zen.ping_timeout: 150s #discovery.zen.fd.ping_retries: 10 #client.transport.ping_timeout: 60s http.cors.enabled: true http.cors.allow-origin: "*"(3)设置JVM堆大小
[root@mes-1 config]# vim jvm.options ----将 -Xms1g ----修改成 -Xms2g -Xmx1g ----修改成 -Xms2g注意: 确保堆内存最小值(Xms)与最大值(Xmx)的大小相同,防止程序在运行时改变堆内存大小。 堆内存大小不要超过系统内存的50%
(4)创建ES数据及日志存储目录
[root@mes-1 ~]# mkdir -p /data/elasticsearch/data (/data/elasticsearch) [root@mes-1 ~]# mkdir -p /data/elasticsearch/logs (/log/elasticsearch)(5)修改安装目录及存储目录权限
[root@mes-1 ~]# chown -R else:else /data/elasticsearch [root@mes-1 ~]# chown -R else:else /usr/local/elasticsearch-6.5.43、系统优化
(1)增加最大文件打开数
永久生效方法:
echo "* - nofile 65536" >> /etc/security/limits.conf
(2)增加最大进程数
[root@mes-1 ~]# vim /etc/security/limits.conf ---在文件最后面添加如下内容 * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096 更多的参数调整可以直接用这个(3)增加最大内存映射数
[root@mes-1 ~]# vim /etc/sysctl.conf ---添加如下 vm.max_map_count=262144 vm.swappiness=0 [root@mes-1 ~]# sysctl -p 解释:在内存不足的情况下,使用交换空间。 [root@mes-1 ~]# sysctl -w vm.max_map_count=262144 增大用户使用内存的空间(临时)4、启动ES
[root@mes-1 ~]# su - elsearch Last login: Sat Aug 3 19:48:59 CST 2019 on pts/0 [root@mes-1 ~]$ cd /usr/local/elasticsearch-6.5.4/ [root@mes-1 elasticsearch-6.5.4]$ ./bin/elasticsearch #先启动看看报错不,需要多等一会 终止之后 [root@mes-1 elasticsearch-6.5.4]$ nohup ./bin/elasticsearch & #放后台启动 [1] 11462 nohup: ignoring input and appending output to ‘nohup.out’ [root@mes-1 elasticsearch-6.5.4]$ tail -f nohup.out #看一下是否启动 或者: su - elsearch -c "cd /usr/local/elasticsearch-6.5.4 && nohup bin/elasticsearch &"访问浏览器
5.安装配置head监控插件(Web前端)----只需要安装一台就可以了。 10.8.162.83
(1)安装node
[root@es-3-head-kib ~]# wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz [root@es-3-head-kib ~]# tar -zxf node-v4.4.7-linux-x64.tar.gz –C /usr/local [root@es-3-head-kib ~]# vim /etc/profile #添加如下变量 NODE_HOME=/usr/local/node-v4.4.7-linux-x64 PATH=$NODE_HOME/bin:$PATH export NODE_HOME PATH [root@es-3-head-kib ~]# source /etc/profile [root@es-3-head-kib ~]# node --version #检查node版本号 v4.4.7(2)下载head插件
[root@es-3-head-kib ~]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip [root@es-3-head-kib ~]# cp master.zip /usr/local/ [root@es-3-head-kib ~]# yum -y install unzip [root@es-3-head-kib ~]# cd /usr/local [root@es-3-head-kib ~]# unzip master.zip(3)安装grunt
[root@es-3-head-kib ~]# cd elasticsearch-head-master/ [root@mes-3-head-kib elasticsearch-head-master]# npm install -g grunt-cli #时间会很长 [root@es-3-head-kib elasticsearch-head-master]# grunt --version #检查grunt版本号 grunt-cli v1.3.2(4)修改head源码
[root@es-3-head-kib elasticsearch-head-master]# vim /usr/local/elasticsearch-head-master/Gruntfile.js (在95行左右)添加hostname,注意在上一行末尾添加逗号,hostname 不需要添加逗号
[root@es-3-head-kib elasticsearch-head-master]# vim /usr/local/elasticsearch-head-master/_site/app.js (4359左右)如果在一台机器上面可以不修改下面的操作。保持原来的就可以了
如果是集群需要修改如下信息:
原本是http://localhost:9200 ,如果head和ES不在同一个节点,注意修改成ES的IP地址
(5)下载head必要的文件
[root@es-3-head-kib ~]# wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@es-3-head-kib ~]# yum -y install bzip2 [root@es-3-head-kib ~]# tar -jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /tmp/ #解压(6)运行head
[root@es-3-head-kib ~]# cd /usr/local/elasticsearch-head-master/ [root@es-3-head-kib ~]# npm config set registry https://registry.npm.taobao.org [root@es-3-head-kib elasticsearch-head-master]# npm install ... grunt-contrib-jasmine@1.0.3 node_modules/grunt-contrib-jasmine ├── sprintf-js@1.0.3 ├── lodash@2.4.2 ├── es5-shim@4.5.13 ├── chalk@1.1.3 (escape-string-regexp@1.0.5, supports-color@2.0.0, ansi-styles@2.2.1, strip-ansi@3.0.1, has-ansi@2.0.0) ├── jasmine-core@2.99.1 ├── rimraf@2.6.3 (glob@7.1.4) └── grunt-lib-phantomjs@1.1.0 (eventemitter2@0.4.14, semver@5.7.0, temporary@0.0.8, phan [root@es-3-head-kib elasticsearch-head-master]# nohup grunt server & [root@es-3-head-kib elasticsearch-head-master]# tail -f nohup.out Running "connect:server" (connect) task Waiting forever... Started connect web server on http://localhost:9100(7)测试
出现页面就成功了。
1、安装配置kibana
(1)安装
[root@es-3-head-kib ~]# tar zvxf kibana-6.5.4-linux-x86_64.tar.gz -C /usr/local/(2)配置
[root@es-3-head-kib ~]# cd /usr/local/kibana-6.5.4-linux-x86_64/config/ [root@es-3-head-kib config]# vim kibana.yml server.port: 5601 server.host: "10.8.162.192" #kibana本机的地址 elasticsearch.url: "http://10.8.162.72:9200" #ES主节点地址+端口 kibana.index: ".kibana"(3)启动
[root@es-3-head-kib config]# cd .. [root@es-3-head-kib kibana-6.5.4-linux-x86_64]# nohup ./bin/kibana & [1] 12054 [root@es-3-head-kib kibana-6.5.4-linux-x86_64]# nohup: ignoring input and appending output to ‘nohup.out’2. 安装配置Nginx反向代理
(1)配置YUM源:
[root@es-3-head-kib ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm(2)安装:
[root@es-3-head-kib ~]# yum install -y nginx(3)配置反向代理
[root@es-3-head-kib ~]# cd /etc/nginx/conf.d/ [root@es-3-head-kib conf.d]# cp default.conf nginx.conf [root@es-3-head-kib conf.d]# mv default.conf default.conf.bak [root@es-3-head-kib conf.d]# vim nginx.conf server { listen 80; server_name 10.8.162.192; #charset koi8-r; # access_log /var/log/nginx/host.access.log main; # access_log off; location / { proxy_pass http://10.8.162.192:5601; proxy_set_header Host $host:5601; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Via "nginx"; } location /status { stub_status on; #开启网站监控状态 access_log /var/log/nginx/kibana_status.log; #监控日志 auth_basic "NginxStatus"; } location /head/{ proxy_pass http://10.8.162.192:9100; proxy_set_header Host $host:9100; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Via "nginx"; } }(4)配置nginx
1.将原来的log_format注释掉,添加json格式的配置信息,如下: [root@es-3-head-kib conf.d]# vim /etc/nginx/nginx.conf log_format json '{"@timestamp":"$time_iso8601",' '"@version":"1",' '"client":"$remote_addr",' '"url":"$uri",' '"status":"$status",' '"domain":"$host",' '"host":"$server_addr",' '"size":$body_bytes_sent,' '"responsetime":$request_time,' '"referer": "$http_referer",' '"ua": "$http_user_agent"' '}'; 2.引用定义的json格式的日志: access_log /var/log/nginx/access_json.log json;(5)启动nginx
root@es-3-head-kib ~]# systemctl start nginx三、 Logstash部署
1.安装配置Logstash
Logstash运行同样依赖jdk,本次为节省资源,故将Logstash安装在了kafka244.231节点。
[root@es-2-zk-log ~]# tar -xvzf jdk-8u211-linux-x64.tar.gz -C /usr/local/ [root@es-2-zk-log ~]# cd /usr/local/ [root@es-2-zk-log ~]# mv jdk1.8.0_211/ java [root@es-2-zk-log ~]# vim /etc/profile [root@es-2-zk-log elk_packages]# tail -3 /etc/profile JAVA_HOME=/usr/local/java PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH(1)安装
[root@es-2-zk-log ~]# tar xvzf logstash-6.5.4.tar.gz -C /usr/local/(2)配置
创建目录,我们将所有input、filter、output配置文件全部放到该目录中。
1.安装nginx: [root@es-2-zk-log ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm [root@es-2-zk-log ~]# yum install -y nginx 将原来的日志格式注释掉定义成json格式: [root@es-2-zk-log conf.d]# vim /etc/nginx/nginx.conf log_format json '{"@timestamp":"$time_iso8601",' '"@version":"1",' '"client":"$remote_addr",' '"url":"$uri",' '"status":"$status",' '"domain":"$host",' '"host":"$server_addr",' '"size":$body_bytes_sent,' '"responsetime":$request_time,' '"referer": "$http_referer",' '"ua": "$http_user_agent"' '}'; 2.引用定义的json格式的日志: access_log /var/log/nginx/access_json.log json; [root@es-2-zk-log ~]# systemctl start nginx [root@es-2-zk-log ~]# systemctl enable nginx 浏览器多访问几次 [root@es-2-zk-log ~]# mkdir -p /usr/local/logstash-6.5.4/etc/conf.d [root@es-2-zk-log ~]# cd /usr/local/logstash-6.5.4/etc/conf.d/ [root@es-2-zk-log conf.d]# vim input.conf #---在下面添加 input { #让logstash可以读取特定的事件源。 file { #从文件读取 path => ["/var/log/nginx/access_json.log"] #要输入的文件路径 # code => "json" #定义编码,用什么格式输入和输出,由于日志就是json格式,这里不用再写 type => "shopweb" #定义一个类型,通用选项. 用于激活过滤器 } } [root@es-2-zk-log conf.d]# vim output.conf output { #输出插件,将事件发送到特定目标 elasticsearch { #输出到es hosts => ["10.8.162.72:9200"] #指定es服务的ip加端口 index => ["%{type}-%{+YYYY.MM.dd}"] #引用input中的type名称,定义输出的格式 } } 启动: [root@es-2-zk-log conf.d]# cd /usr/local/logstash-6.5.4/ [root@es-2-zk-log logstash-6.5.4]# nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &查看日志出现:
[root@es-2-zk-log logstash-6.5.4]# tail -f nohup.out [2019-08-04T01:39:24,671][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=>{"template"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s"}, "mappings"=>{"_default_"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}}}在浏览器中访问本机的nginx网站
然后去head插件页面查看是否有shopweb索引出现
发现之后,去配置kibana添加索引。
可以根据某个特定的值,来查看记录,比如
多刷新几次本机的nginx页面,可以看到相应的日志记录