CentOS7下ELK安装调试

  1. 写作背景
  2. 架构规划
  3. 软件下载安装
    1. 软件下载
    2. 软件安装及配置
      1. 安装java1.8
      2. 安装 elasticsearch
      3. 安装并配置 Logstash
      4. 安装配置Redis
      5. 安装kibana

写作背景

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

  • 收集-能够采集多种来源的日志数据
  • 传输-能够稳定的把日志数据传输到中央系统
  • 存储-如何存储日志数据
  • 分析-可以支持 UI 分析
  • 警告-能够提供错误报告,监控机制

ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

架构规划

1、服务器架构

ELK架构图

普通日志整体路径:

各系统生成日志–>>filebeat推送到–>>logstash(172.17.0.179-180)筛选后添加Index–>>ES(172.17.0.181)–>>kibana(172.17.0.85 nginx代理负载均衡到172.17.0.179-180,可以只用一台,这里只做测试)

特定日志整体路径

各系统生成日志–>>filebeat推送到–>>logstash(172.17.0.179-180)筛选后推送到–>>redis(172.17.0.185)推送到–>>Logstash(172.17.0.185)–>ES(172.17.0.181)–>>kibana(172.17.0.85 nginx代理负载均衡到172.17.0.179-180,可以只用一台,这里只做测试)

2、服务器安装规划

NO. IP hostname soft
1 172.17.0.179 kibana1.sctx.uat jdk8,logstash,kibana,nginx
2 172.17.0.180 kibana2.sctx.uat jdk8,logstash,kibana,nginx
3 172.17.0.181 es1.sctx.uat jdk8,elasticsearch
4 172.17.0.182 es2.sctx.uat jdk8,elasticsearch
5 172.17.0.183 es3.sctx.uat jdk8,elasticsearch
6 172.17.0.184 es4.sctx.uat jdk8,elasticsearch
7 172.17.0.185 elk-redis.sctx.uat jdk8,logstash,redis

软件下载安装

软件下载

1、Java1.8
2、ELK(elasticsearch,logstash,kibana,filebeat)

https://www.elastic.co/downloads

3、Redis

http://download.redis.io/releases/redis-4.0.9.tar.gz

软件安装及配置

安装java1.8

1、将 prm 文件下载到本地,然后在本地安装

yum localinstall jdk-8u172-linux-x64.rpm -y

安装 elasticsearch

1、将安装包下载到本地,然后通过本地安装

yum localinstall -y elasticsearch-6.2.4.rpm

2、修改配置文件

此配置文件除node.name 和 network.host 在各服务器上不同之外,其它地方不用改变各服务器通用
主机:172.17.0.181,172.17.0.182,172.17.0.183,172.17.0.183

# 修改系统配置环境(不建议修改)
vi /etc/sysconfig/elasticsearch

# 修改软件配置
vi /etc/elasticsearch/elasticsearch.yml

# 修改第17行 ES群集名称(各服务器配置要相同)
cluster.name: ELK-Sctx-UAT

# 修改第23行 节点名称(当前节点的名称,每台服务器不能相同)
node.name: sctx1

# 修改第33行日志数据存储路径(ES收集的其它服务器,软件的日志)
# 这里一定要注意,如果不是默认目录,请一定要给目标目录加上
# elasticsearch用户,用户组的所有者权限
# 这里的作法是:默认路径不变,将目标目录做文件夹软链接。
path.data: /var/lib/elasticsearch

# 修改第37行日志路径(这里是ES自身产生的日志),不建议修改,可以参照上面的方法。
path.logs: /data/logs/elasticsearch

# 修改第55行,本机IP
network.host: 172.17.0.181

# 修改第59行,程序运行端口(如果有必要就修改一下,另外注意防火墙是否开启相应端口)
http.port: 9200

# 修改第69行,添加群集内各主机的IP,或者域名,使ES主机自动组成群集。
discovery.zen.ping.unicast.hosts: ["172.17.0.181","172.17.0.182","172.17.0.183","172.17.0.183"]

# 其它设置暂时保持默认。

3、根据配置文件修改几个路径(默认在根路径下,一般情况下根路径硬盘空间都比较小,所以修改一下)。

mkdir -p /data/logs/elasticsearch
rm -rf /var/lib/elasticsearch/
ln -s /data/lib/elasticsearch /var/lib/elasticsearch
chown -R elasticsearch:elasticsearch /data/logs/elasticsearch
chown -R elasticsearch:elasticsearch /data/lib/elasticsearch
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch
ll /var/lib/ /data/lib/ /data/logs/

保存,退出

4、启动服务并加入自动启动

systemctl start elasticsearch 
systemctl enable elasticsearch 

5、查看启动状态

systemctl status elasticsearch -l

ES状态

6、查看启动端口

ss -tnl

端口查看

安装并配置 Logstash

1、将安装包下载到本地,然后通过本地安装

yum localinstall -y  logstash-6.2.4.rpm

2、修改配置文件

这个Logstash用来接收Filebeat传输过来的日志,然后分类推送到ES或者Redis。
主机:172.17.0.179,172.17.0.180

# 修改系统环境路径,日志路径(不建议修改,如果有修改,请注意目录权限)
vi /etc/logstash/startup.options

# 修改公共软件配置(不建议修改)
vi /etc/logstash/logstash.yml

# 新建 lostash 运行配置文件(这个是自定义的)
# 要在/etc/logstash/conf.d/ 下建立 *.conf文件
vi /etc/logstash/conf.d/logstash.conf

具体配置如下:

# FileName:logstash.conf
# FilePath: /etc/logstash/conf.d
# Author: Longger
# Data:2018-05-16

# Logs Source
# 日志来源 这里是来自filebeat,要在filebeat的输出中指向logstash服务器的IP

input {
  beats {
    port => 5044
  }
}

# logs filter,include date,tag..

# 日志筛选器,过滤出日志生成时间,移除多余Tags,添加指定Tags,
# 替换 @timestamp

filter {

  # logdate
  grok {
    match => ["message","(?<logdate>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}\s+%{TIME})"]
        remove_tag => "beats_input_codec_plain_applied"
        remove_tag => "_dateparsefailure"
  }
  
  grok {
    match => ["message","analyze_result"]
      add_tag => ["analyze"]
      remove_tag => "_grokparsefailure"
  }

  # change @timestamp from logdate (the logs date)
  if "spider" in [tags] {
    date {
      match => ["logdate","yyyy-MM-dd HH:mm:ss:SSS"]
          target => "@timestamp"
          remove_field => "logdate"
    }
  }
  else {
    date {
      match => ["logdate","yyyy-MM-dd HH:mm:ss.SSS"]
          target => "@timestamp"
          remove_field => "logdate"
    }
  }
}

# Logs Output
# 日志输出,根据指定条件输出不同的Index,或不同的服务器。
# 比如这里可以输出到ES,也可以输出到Redis
# 这里使用的判断条件是Tags,Tags是在Filebeat输出时添加的,
# 也可以在上面的Filter中添加。
# 输出的 ES 直接指向群集中的一台,系统会自动负载均衡。 

output {
  stdout {codec => rubydebug}
  if "openapi" in [tags] {
    elasticsearch {
    hosts => "172.17.0.181:9200"
    manage_template => true
    index => "openapi-%{+yyyy.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
  }
  else if "spider" in [tags] {
    elasticsearch {
    hosts => "172.17.0.181:9200"
    manage_template => true
    index => "spider-%{+yyyy.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
  }
  else if "proxy" in [tags] {
    elasticsearch {
    hosts => "172.17.0.181:9200"
    manage_template => true
    index => "proxy-%{+yyyy.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

# 这个是我要单独筛选出来,用于做出图表的数据,输出到Redis
  else if "analyze" in [tags] {
    redis {
      host => "172.17.0.185"
      port => "6379"
      data_type => "list"
      key => "logstash:analyze"
    }
  }
  else {
    elasticsearch {
      hosts => "172.17.0.181:9200"
      manage_template => true
      index => "%{[@metadata][beat]}-%{+yyyy.MM.dd}"
      document_type => "%{[@metadata][type]}"  
    }
  }
}

3、修改配置文件

这个Logstash用来接收Redis传输过来的日志,然后添加Index推送到ES。
主机:172.17.0.185

input {
  redis {
    host => "172.17.0.185"
    port => "6379"
    data_typy => "list"
    key => "logstash:analyze_result"
  }
}
output {
  elasticsearch {
    hosts => "10.10.5.152:9200"
    manage_template => true
    index => "analyze-%{yyyy.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

4、启动服务并加入自动启动

systemctl start logstash
systemctl enable logstash

5、查看启动状态

systemctl status logstash -l

ls状态

6、查看启动端口

ss -tnl

查看端口

安装配置Redis

1、将安装包下载到本地,然后解压安装。

tar -xzvf redis-4.0.9.tar.gz

# 进入目录

cd redis-4.0.9

# make 编译安装
# 安装编译环境
yum install gcc-c++ tcl -y

# make && make install
make MALLOC=libc
make install

# 通过脚本安装为系统服务
cd ./utils/
./install_server.sh

安装

2、修改配置

vi /etc/redis/6379.conf 

# 修改70行,bind 127.0.0.1 ,否则其它地方不能访问。
bind 0.0.0.0

3、启动服务

systemctl start redis_6379
systemctl enable redis_6379
systemctl status redis_6379 -l

redis状态

4、查看端口

ss -tnl

![查看端口]](CentOS7%E4%B8%8BELK%E5%AE%89%E8%A3%85%E8%B0%83%E8%AF%95/elk-red3.png)

安装kibana

1、将安装包下载到本地,然后通过本地安装

yum localinstall -y kibana-6.2.4-x86_64.rpm

安装 nginx 做反向代理并使用密码

yum install nginx httpd-tools

2、修改配置文件

vim /etc/kibana/kibana.yml

# 修改第2行,指定端口,不修改会默认5601
server.port: 5601

# 修改第7行为本机IP
server.host: "172.17.0.180"

# 修改第21行,ES主机集群的地址(指定期中一台就可以了)
elasticsearch.url: "http://172.17.0.181:9200"

# 其它地方暂时不用修改,待后续研究。

3、启用nginx代理

server {
  listen 80;
  server_name kibana;

  auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/kibana-user;

    location / {
    proxy_pass http://172.17.0.180:5601;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }
}

4、生成登录用户

htpasswd -cm /etc/nginx/kibana-user admin

5、启动服务

systemctl start kibana
systemctl enable kibana
systemctl status kibana -l
systemctl start nginx
systemctl enable nginx
systemctl status nginx -l

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin

文章标题:CentOS7下ELK安装调试

字数:2.5k

本文作者:Longger

发布时间:2019-07-19, 11:40:52

最后更新:2024-11-13, 22:11:43

原始链接:https://www.longger.xin/article/45613.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

github