ELK01-ELK Stack Centos安装部署

隐身守侯 提交于 2019-12-01 08:45:35

前言

ELK可以理解为由各种beat或其他类似组件去收集各类型日志通过logstash管道(logstash自身也可以收集日志,同时也可以接收beat发送来的数据)output丢给ElasticSearch存储引擎,再由Kibana获取存储引擎数据成图呈现给用户。
为什么需要ELK? -- ELK是一套完整的开源解决方案,可帮助在运维工作过程用于快速故障排查、日志审计、综合展示、监控报警、关联统计信息等。

ELK基本组件
  1、ElasticSearch 基于lucene(信息检索组件)的分布式文件存储,支持横向扩展、自动发现、索引自动分片以及Restfull的全文本搜索引擎,此外,它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索,还是一个带实时分析功能的分布式引擎,能够扩展至数以百计的节点实时处理PB级数据。
  2、Logstash 是重量级的,支持多数据获取机制,通过TCP/UDP协议、文件、syslog、windows Eventlogs及STDIN等;获取到数据后,它支持对数据执行过滤、编码、修改等操作。使用JRuby语言,需要JVM下运行。
  3、Kibana 为日志分析提供一个可视并友好的图形界面,并且可以绝大多数的汇总、分析需求。
  4、Beat 目前ELK官方提供了比较多元化的beat类型 。
      Filebeat轻量级的日志收集组件。
      Metricbeat用于收集系统CPU、RAM、IO、volume等性能指标。
      Packetbeat是一个轻量级的网络数据包分析组件。
      Winlogbeat是一个轻量级Windows Event收集组件。
      Auditbeat轻量型审计日志采集器收集Linux 审计框架的数据,监控文件完整性。
      Heartbeat轻量级状态监测,可以对一个URL列表进行可用性监控对响应时间、状态、IP进行记录。
      Functionbeat面向云端数据的无服务器采集,例如你使用阿里云或者AWS的一些SAAS服务,这些服务的运行主机并不在你的掌握中,但它们也非常重要此时可以将Fucationbeat作为一个功能放入Lambda去搜集指标和日志然后发送给ELK进行分析展示。                                                                       

  5、XPACK 一般用于安全角色认证,付费后有更多的图表、监控等功能扩展。

 

本次使用两台服务器作为ELK STACK

  austyn-test-001 -->  ElasticSearch Master + logstash + kibana + beat + ElasticHQ(为ElasticSearch集群提供一个监控和管理平台的组件)

  austyn-test-002 -->  ElasticSearch Slave + logstash + beat

 

环境准备

  涉及到服务器集群应该先对时间、时区进行同步

  ntpdate time.windows.com  #偷个懒

  下载相应软件包

  wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.1-x86_64.rpm
  wget https://artifacts.elastic.co/downloads/beats/winlogbeat/winlogbeat-7.3.1-windows-x86_64.zip
  wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.1-x86_64.rpm
  wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.1.rpm
  wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-windows-x86_64.zip
  wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm
  wget https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-7.3.1-windows-x86_64.zip
  wget https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-7.3.1-x86_64.rpm
  wget https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-7.3.1-windows-x86_64.zip
  wget https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-7.3.1-x86_64.rpm

  两台服务器部署java环境

    rpm -qa |grep *jdk*  #查询是否有老的JDK版本,有的话就卸载

    yum install java-1.8.0-openjdk  java-1.8.0-openjdk-devel -y 

    java -version   #测试

   

  安装ES,两台都安装配置

  rpm -ivh elasticsearch-7.3.1-x86_64.rpm

    ElasticHQ需要 python3.4环境,但是pytest5 需要3.5以上版本,所以使用的是python3.7

    wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz

    tar xf Python-3.7.4.tar.xz

   cd Python-3.7.4/

    yum install sqlite-* openssl openssl-devel  libffi-devel -y #不同的环境可能缺少一些编译组件,需要装上

   ./configure

        make

        make install

        python3.7 -V   #测试

  mkdir hq && cd hq

  git clone https://github.com/ElasticHQ/elasticsearch-HQ.git

    cd elasticsearch-HQ/

    pip3.7 install --upgrade pip  #pip3.7 --default-timeout=100 install 如果网速比较慢的可以加上此参数

    pip3.7 install --upgrade setuptools

    pip3.7 install --upgrade distribute

 

    pip3.7 install -r requirements.txt

  
  vim /etc/elasticsearch/elasticsearch.yml

     austyn-test-001:

   cluster.name: austyn-elk  #集群名,各节点应该保持一致

   node.name: node-130    #节点名

   path.data: /var/lib/elasticsearch  #数据存放路径

   path.logs: /var/log/elasticsearch  #日志存放路径

   network.host: 0.0.0.0     #侦听IP,注释代表侦听所有可用IP

   http.port: 9200        #侦听端口TCP

   discovery.seed_hosts: ["192.168.2.130", "192.168.2.131"]  #主机发现,各节点主机的列表

   cluster.initial_master_nodes: ["node-130"]  #手动选举master节点

   http.cors.enabled: true    #支持跨域访问,允许HQ访问

        http.cors.allow-origin: "*"   #跨域访问范围

   

   austyn-test-002:

   cluster.name: austyn-elk

   node.name: node-131

   path.data: /var/lib/elasticsearch

   path.logs: /var/log/elasticsearch

   network.host: 0.0.0.0

   http.port: 9200

   discovery.seed_hosts: ["192.168.2.130", "192.168.2.131"]

   cluster.initial_master_nodes: ["192.168.2.130"]

   http.cors.enabled: true

   http.cors.allow-origin: "*"

   service elasticsearch start   #启动两个节点的ElasticSearch  

 

  安装Kibana

  rpm -ivh kibana-7.3.1-x86_64.rpm

  vim /etc/kibana/kibana.yml

  server.port: 5601 #监听端口

  server.host: "0.0.0.0" #监听IP

  elasticsearch.hosts: ["http://192.168.2.130:9200","http://192.168.2.131:9200"]   #ElasticSearch节点列表

  i18n.locale: "zh-CN"  #中文支持

  service kibana start

  

  两台都安装logstash、nginx

  rpm -ivh logstash-7.3.1.rpm

   vim /etc/logstash/logstash.yml

  path.data: /var/lib/logstash  #数据存储路径

  http.host: "192.168.2.130"  #根据实际情况,注意开头不能有空格

  http.port: 9600  #支持范围 9600-9700 会选择第一个可用的端口

  wget http://nginx.org/download/nginx-1.16.1.tar.gz

  tar xf nginx-1.16.1.tar.gz

  cd nginx-1.16.1/

  ./configure --prefix=/usr/local/nginx

  make

  make install

  vim /usr/local/nginx/conf/nginx.conf

   增加日志类型在http段定义

log_format access_json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"status":"$status"}';

server {
listen 8999;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
proxy_pass http://192.168.2.130:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#root html;
#index index.html index.htm;

access_log /var/log/nginx/elk_access.log access_json;
}

  echo '

input {
file {
path => "/var/log/nginx/elk_access.log"
start_position => "beginning"
type => "nginx"
codec => "json"
}
}

output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["192.168.2.130:9200"]
index => "nginx-test-%{+YYYY.MM.dd}"
}
}'  >>  /etc/logstash/conf.d/nginx_access.conf

 

mkdir /var/log/nginx

touch /var/log/nginx/elk_access.log

/usr/local/nginx/sbin/nginx

nohup /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx_access.conf &  #推荐使用screen

启动ElasticseachHQ

 cd /root/elkdownload/hq/elasticsearch-HQ/

python3.7 application.py   #启动后,http形式访问5000端口,为了有测试数据应该先访问一下8999端口

    

 

Kibana端口为5601 http://$ip:5601,也可以使用8999用Nginx做了反向代理,在Kibana上添加数据,到此已经完成ELK的部署

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!