Madao No More

你的努力程度之低,根本轮不到拼天赋.


  • 首页

  • 底层基础

  • 人文书籍

  • 日记

  • 面试问题

  • Linux

  • 编程语言

  • 服务器应用

  • 各种工具软件

  • 工作中的问题

  • 归档

  • 关于

  • 搜索
close

12-Elastic_Stack日志管理

时间: 2019-05-18   |   分类: Linux     |   阅读: 3256 字 ~7分钟
  • 1. 简介
  • 2. 安装和搭建
  • 3. 通过Kibana查看日志
  • 4. 收集Nginx的日志
  • 5. 使用Beats来收集日志
  • 6. 其他参考资料

1. 简介

Elastic Stack:原来是ELK Stack(Elasticsearch,Logstash,Kibana),加上Beats后升级为Elastic Stack

  • ElasticSearch:分布式搜索引擎,可以自动发现,izdong嗯片
  • Kibana:可视化工具
  • Logstash:日志采集,把日志转换为json并交给ElasticSearch,可以自定义字段等等.
  • Beats:日志采集,比上面的轻量诶长多
  • Stack eatures(原来的X-pack):安全套件,收费

原理

2. 安装和搭建

准备:3台机器,最好每台2g,1g非常勉强,容易卡死

  • 主节点:30
    • jdk
    • es
    • logstash
    • kibana
  • 数据节点:31,32
    • jdk
    • es

通用:

官方文档,非常详细:https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html

sudo systemctl stop firewalld
sudo setenforce 0
sudo yum install -y java-1.8.0-openjdk

# 直接下载安装
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.0.1-linux-x86_64.tar.gz.sha512
tar -xzf elasticsearch-7.0.1-linux-x86_64.tar.gz
cd elasticsearch-7.0.1/

# 使用yum安装
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vim /etc/yum.repos.d/elsticsearch-7.x.repo
#内容如下
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

sudo yum install -y elasticsearch

# 或者直接下载rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-x86_64.rpm


主节点:

sudo vi /etc/elasticsearch/elasticsearch.yml
# 更改,最好是按照配置的分类来写
cluster.name: test
node.name: master30
node.master: true
  #意思是该节点为主节点
node.data: false
network.host: 0.0.0.0
  # 绑定IP,绑定本机的内网IP
  # 如果有多个网卡,最好还是绑定一下
http.port: 9200
# 以下是es6的用法,  可以是主机名
discovery.zen.ping.unicast.hosts: ["192.168.10.30", "192.168.10.31", "192.168.10.32"]
# 7 的
discovery.seed_hosts: ["192.168.10.30", "192.168.10.31", "192.168.10.32"]
cluster.initial_master_nodes: ["master30"]
  # 只需要配置master的node.name即可.


# 开机启动:
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

# 首先启动主节点
# 会在/var/log/elasticsearch/你的cluster名.log

# 测试
curl '192.168.10.30:9200/_cluster/health?pretty'
  # 这里的localhost,就是你绑定的IP
  # 健康检查
  # 返回的json status:green 表示一切ok
curl '192.168.10.30:9200/_cluster/state?pretty'
  # 集群详细信息

# Curl命令操作ES:<http://zhaoyanblog.com/archives/732.html>

# 安装kibana
# 如果前面已经配置过yum源
sudo yum install -y kibana

# 直接下载rpm
sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-7.0.1-x86_64.rpm

# 配置kibana
sudo vi /etc/kibana/kibana.yml
# 打开注释即可
server.port: 5601
server.host: "192.168.10.30"
  # 监听IP
# 6
elasticsearch.url: "http://192.168.10.30:9200"
# 7
elasticsearch.hosts: ["http://192.168.10.30:9200"]

logging.dest: /var/log/kibana.log
  # 默认是输出到 /var/log/message下

# 创建log文件
sudo touch /var/log/kibana.log &&sudo chmod 777 /var/log/kibana.log

sudo systemctl restart kibana

# 浏览器里访问http://192.168.10.30:5601/
# 用户名elastic,密码为之前你设置过的密码,默认是不需要密码
# 若无法输入用户名密码,查日志/var/log/kibana.log
# 出现错误  Status changed from uninitialized to red - Elasticsearch is still initializing the kibana index.
# 解决办法:curl -XDELETE http://192.168.10.30:9200/.kibana -uelastic


数据节点:

sudo vi /etc/elasticsearch/elasticsearch.yml
# 更改
cluster.name: test
node.name: data31
  # 另外一个data32
node.master: false
node.data: true
network.host: 0.0.0.0
  # 指定IP
http.port: 9200
# 以下是es6的用法
discovery.zen.ping.unicast.hosts: ["192.168.10.30", "192.168.10.31", "192.168.10.32"]
# 以下是7的用法
discovery.seed_hosts: ["192.168.10.30", "192.168.10.31", "192.168.10.32"]

# 开机启动:
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
# 然后启动数据节点

# 安装logstash, logstash目前不支持java9
# yum
sudo yum install -y logstash

sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.rpm

# 测试
sudo vi /etc/logstash/logstash.yml
# 修改绑定ip
http.host: "192.168.10.32"
  # 同理31

# 配置要收集的日志,以下是系统日志
sudo vi /etc/logstash/conf.d/syslog.conf
  # 需要收集的都放到conf.d中以.conf结尾
# 加入如下内容,删除注释
input {
  syslog {
    # 把日志输出到10514端口==>用于远程传输,原来是直接输出到/var/log/message
    type => "system-syslog"
    port => 10514
  }
}
# 用于下面的测试
#output {
#  # 输出到当前屏幕
#  stdout {
#    codec => rubydebug
#  }
#}
# 以下是用于输入到es,测试完成后才使用如下配置
output {
  elasticsearch {
    # 由于是分布式的,随便指向其中一台即可.由于资源问题,这里只开master30
    hosts => ["192.168.10.30:9200"]
    index => "system-syslog-%{+YYYY.MM}"
  }
}
# 后台服务会监听两个端口,一个是10514自己定义的.一个是9600


# 检测配置文件是否有错
cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
  # 如果提示内存不足,先把elasticsearch关闭
  # 其启动特别耗费资源
  # 成功会输出 ok
  # 如果使用root用户,会造成日志等的身份都是root.以logstash用户后台启动不成功

# 测试是否能够正常收集
# 前台形式启动logstash
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
  # 这样可以在屏幕上查看到日志输出
# 再开一个终端, 检测是否开启10514端口:
netstat -lnp |grep 10514

# 修改系统日志输出
sudo vi /etc/rsyslog.conf
# 在#### RULES下面增加一行
*.* @@192.168.10.32:10514
  # 由于是本机,可以直接127.0.0.1:10514
  # 还有31机器
  # 日志输出到10514端偶
sudo systemctl restart rsyslog
  # 可以通过登录,yum等来生成日志
  # 会在logstash终端,以json形式输出
  # 结束logstash,在前台的那个终端上按ctrl c

sudo chown -R logstash:logstash /var/lib/logstash/
sudo chown logstash:logstash /var/log/logstash/logstash-plain.log
  # 可以排查上面的日志

# 测试完成,没有问题后,重新修改配置文件,让其输出到es.并以服务形式启动
# 可能需要安装systemd
sudo /usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd

sudo systemctl enable logstash
sudo systemctl start logstash
  # 启动时间很长,直到出现9600和10514端口后才算启动成功

# 然后再尝试启动es,实在不行就算了.
# 把master30上的seed_hosts关闭


相关知识点:

  • /etc/sysconfig/elasticsearch:es整体服务配置
  • /etc/elasticsearch/elasticsearch.yml:集群配置,IP,端口等
  • 9200端口:ES通信
  • 9300端口:数据传输
  • /usr/share/elastic这些软件的目录:安装目录

3. 通过Kibana查看日志

主节点:

curl '192.168.10.30:9200/_cat/indices?v'
  # 可以获取索引信息
curl -XGET '192.168.10.30:9200/system-syslog-2019.05?pretty'
  # 可以获指定索引详细信息
  # system-syslog-2019.05 是上面output定义的
curl -XDELETE '192.168.10.30:9200/索引名'
  # 可以删除指定索引

elasticsearch的索引加入到kibana:

  • 浏览器访问192.168.10.30:5601,到kibana配置索引
  • 左侧点击"Managerment"-> “Index Patterns”-> “Create Index Pattern”
    • 勾选右边的 Include system indices
      • 如果没有的话,再yum或登录一下来生成
    • Index pattern这里需要根据前面curl查询到的索引名字来写,否则下面的按钮是无法点击的

      system-syslog-*

    • filter随便即可

discover:选择你上面创建的名i,即可看到图表

4. 收集Nginx的日志

在32数据节点上配置,31还是系统日志

# 按装nginx
sudo yum install -y epel-release && sudo yum install -y nginx

# 配置虚拟主机
sudo vi /etc/nginx/conf.d/es.conf
# 写入如下内容
server {
  listen 80;
  server_name es.test.com;

  # 代理
  location / {
    proxy_pass      http://192.168.10.30: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;
  }
  access_log  /tmp/es_access.log main2;
}

# 增加日志格式
sudo vim /etc/nginx/nginx.conf
# http中增加如下内容
log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request"'
                  '$status $body_bytes_sent "$http_referer"'
                  '"$http_user_agent" "$upstream_addr" $request_time';

sudo nginx -t
sudo systemctl start nginx

# 访问几次

sudo vi /etc/logstash/conf.d/nginx.conf
# 加入如下内容
input {
  # 使用文件
  file {
    path => "/tmp/es_access.log"
    start_position => "beginning"
      # 从头开始收集
    type => "nginx"
  }
}
filter {
  grok {
    # 如果定义了match,对应的要抓取的日志格式也是需要定义的
    match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"}
    }
  geoip {
    source => "clientip"
  }
}
output {
  stdout { codec => rubydebug }
  elasticsearch {
    hosts => ["192.168.10.30:9200"]
    index => "nginx-test-%{+YYYY.MM.dd}"
  }
}

# 检查配置文件
cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf --config.test_and_exit

# 修改真机hosts,
192.168.10.32 es.test.com
  # 因为是32代理了30上的kibana
  # 访问32 ,32的nginx产生日志,并发送给30的es

#浏览器访问,检查是否有日志产生
sudo systemctl restart logstash
  • 添加索引
  • discover查看

5. 使用Beats来收集日志

强烈推荐使用beats.

把31上的logstash关闭,使用beats来收集

beats是一个套件,有很多,如filebeat(日志文件),packetbeat(网络)等:https://www.elastic.co/cn/products/beats,可扩展

# 同样的yum或下载
sudo wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.0.1-x86_64.rpm

#再编辑配置文件
sudo vim /etc/filebeat/filebeat.yml
# 修改
filebeat.prospectors:
- type:log
  enabled: true
  paths:
    - /var/log/*.log
    - /var/log/messages
output.elasticsearch:
  hosts: ["192.168.10.30:9200"]

sudo systemctl start filebeat
  • kibana添加filebeat-*
  • discover查看

6. 其他参考资料

  • Elastic stack演进:http://70data.net/1505.html
  • 基于kafka和elasticsearch,linkedin构建实时日志分析系统 http://t.cn/RYffDoE
  • ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台https://www.cnblogs.com/delgyd/p/elk.html
  • 关于elk+zookeeper+kafka 运维集中日志管理: http://www.jianshu.com/p/d65aed756587
  • x-pack 收费,免费http://www.jianshu.com/p/a49d93212eca,https://www.elastic.co/subscriptions
    • x-pack已经没了,保存一下
#Linux - CentOS7#
13-KVM虚拟化
0精通Nginx_读后感
Madao

Madao

人的一切痛苦,本质上都是对自己无能的愤怒.

505 日志
8 分类
78 标签
GitHub E-mail
© 2009 - 2022 Madao No More
Powered by - Hugo v0.89.4
Theme by - NexT
0%