设为首页 收藏本站
查看: 1136|回复: 0

[经验分享] centos7搭建ELK开源实时日志分析系统

[复制链接]

尚未签到

发表于 2019-1-28 09:40:42 | 显示全部楼层 |阅读模式
  Elasticsearch 是个开源分布式搜索引擎它的特点有分布式零配置自动发现索引自动分片索引副本机制 restful 风格接口多数据源自动搜索负载等。
  Logstash 是一个完全开源的工具他可以对你的日志进行收集、分析并将其存储供以后使用如搜索。
  kibana 也是一个开源和免费的工具他 Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面可以帮助您汇总、分析和搜索重要数据日志。
  日志从客户端到服务端处理后在传递给客户的数据流流向如下
  Logstash-forwarder--->Logstash--->Elasticsearch--->kibana--->nginx--->客户浏览器
  其中Logstash-forwarder是客户端的日志收集工具将日志发送给服务端Logstash后Logstash通过使用grok匹配规则对日志进行匹配切割然后保存在Elasticsearch中通过kibana从Elasticsearch中读取数据并转交给nginx来处理后返回给客户。
  好了下面就是ELK系统的安装过程了。
  下面是elasticsearch/logstash 所需JVM版本

  首先安装JAVA环境

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm"
rpm -Uvh jdk-8u65-linux-x64.rpm  或者直接yum安装jdk也行不过要保证安装好对应的版本。
  当然也可以源码安装不过源码安装需要注意设置好环境变量
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.tar.gz"
tar zxvf jdk-8u65-linux-x64.tar.gz
mv jdk1.8.0_65 java
vi /etc/profile
JAVA_HOME="/usr/local/java"
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
source /etc/profile  安装好jdk环境之后需要安装Elasticsearch
rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
wget -c https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.noarch.rpm
rpm -ivh elasticsearch-1.7.2.noarch.rpm  修改配置文件如下

cd /usr/local/elasticsearch/
vim config/elasticsearch.yml
path.data: /data/db
network.host: 192.168.100.233  安装Elasticsearch插件如下

cd /usr/share/elasticsearch/ &&  ./bin/plugin -install mobz/elasticsearch-head && ./bin/plugin -install lukas-vlcek/bigdesk/2.5.0  之后启动Elasticsearch
systemctl start elasticsearch  

  然后开始安装kibana
  去https://www.elastic.co/downloads/kibana 找合适的版本每个版本下面有这么一行内容一定要注意这些内容Compatible with Elasticsearch 1.4.4 - 1.7
  我这里选择的是kibana-4.1.3-linux-x64.tar.gz
wget https://download.elastic.co/kibana/kibana/kibana-4.1.3-linux-x64.tar.gz
tar xf kibana-4.1.3-linux-x64.tar.gz
mv kibana-4.1.3-linux-x64 /usr/local/kibana
cd !$
vim config/kibana.yml
port: 5601
host: "192.168.100.233"
elasticsearch_url: "http://192.168.100.233:9200"  

  配置文件中指明kibana侦听5601端口并且通过9200端口从elasticsearch里面获取数据。
  再安装nginx可以选择源码安装这里为了图方便就使用yum安装了。

  yum -y install nginx
  vim /etc/nginx/nginx.conf
  将server改成如下
server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name _;
         location / {
         proxy_pass http://192.168.100.233: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;
            }
}  将日志保存格式修改为如下
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $upstream_response_time $request_time $body_bytes_sent '
             '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$request_body" '
             '$scheme $upstream_addr';  修改日志格式是为了匹配后面的Logstash的grok匹配规则
  启动nginx和kibana
systemctl start nginx
nohup /usr/local/kibana/bin/kibana -l /var/log/kibana.log &  或者也可以看看下面两个脚本
cd /etc/init.d &&  curl -o kibana https://gist.githubusercontent.com/thisismitch/8b15ac909aed214ad04a/raw/fc5025c3fc499ad8262aff34ba7fde8c87ead7c0/kibana-4.x-init
cd /etc/default &&  curl -o kibana https://gist.githubusercontent.com/thisismitch/8b15ac909aed214ad04a/raw/fc5025c3fc499ad8262aff34ba7fde8c87ead7c0/kibana-4.x-default  关于开机启动Kibana的。
  之后就需要安装Logstash了
rpm --import https://packages.elasticsearch.org/GPG-KEY-elasticsearch
vi /etc/yum.repos.d/logstash.repo
[logstash-1.5]
name=Logstash repository for 1.5.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.5/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
yum -y install logstash  这个包比较大可能国内下载起来比较慢可以去官网使用迅雷下载比较快一点。
  创建TLS证书

  logstash和logstash-forwarder通信需要使用tls证书认证。Logstash Forwarder上面只需公钥logstash需要配置公钥、私钥。在logstash服务器上生成ssl证书。
  创建ssl证书有两种方式一种指定IP地址一种指定fqdn(dns)。
  1、指定IP地址方式
  vi /etc/pki/tls/openssl.cnf
  在[ v3_ca ]下面配置subjectAltName = IP:192.168.100.233切记这条很重要因为还有一个地方也有subjectAltName配置错了的话就会一直无法实现认证
cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt  注意将-days设置大点以免证书过期。
  2、使用fqdn方式
  不需要修改openssl.cnf文件。
cd /etc/pki/tls
openssl req -subj '/CN=logstash.abcde.com/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt  将logstash.abcde.com换成你自己的域名。同时到域名解析那添加logstash.abcde.com的A记录。
  使用那种方式都行不过如果logstash服务端的IP地址变换了证书不可用了。
  

  配置logstash
  logstash配置文件是以json格式设置参数的配置文件位于/etc/logstash/conf.d目录下配置包括三个部分输入端过滤器和输出。
  首先创建一个01-lumberjack-input.conf文件设置lumberjack输入Logstash-Forwarder使用的协议。
vi /etc/logstash/conf.d/01-lumberjack-input.conf
input {
  lumberjack {
    port => 5043
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}  再来创建一个02-nginx.conf用于过滤nginx日志
vi /etc/logstash/conf.d/02-nginx.conf
filter {
  if [type] == "nginx" {
    grok {
      match => { "message" => "%{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:method} %{NOTSPACE:request}(?: %{URIPROTO:proto}/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:status} (?:%{NUMBER:upstime}|-) %{NUMBER:reqtime} (?:%{NUMBER:size}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{QS:reqbody} %{WORD:scheme} (?:%{IPV4:upstream}(:%{POSINT:port})?|-)" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
    }
   geoip {
        source => "clientip"
        add_tag => [ "geoip" ]
        fields => ["country_name", "country_code2","region_name", "city_name", "real_region_name", "latitude", "longitude"]
        remove_field => [ "[geoip][longitude]", "[geoip][latitude]" ]
    }
  }
}  这个过滤器会寻找被标记为“nginx”类型Logstash-forwarder定义的的日志尝试使用“grok”来分析传入的nginx日志使之结构化和可查询。
  type要与logstash-forwarder相匹配。
  同时注意将nginx日志格式设置成上面的。
  日志格式不对grok匹配规则要重写。
  可以通过http://grokdebug.herokuapp.com/ 在线工具进行调试。多半ELK没数据错误在此处。
  grok 匹配日志不成功不要往下看了。搞对为止先。
  同时多看看http://grokdebug.herokuapp.com/patterns#   grok匹配模式对后面写规则匹配很受益的。
  最后创建一文件来定义输出。
vi /etc/logstash/conf.d/03-lumberjack-output.conf
output {
    if "_grokparsefailure" in [tags] {
      file { path => "/var/log/logstash/grokparsefailure-%{type}-%{+YYYY.MM.dd}.log" }
    }
    elasticsearch {
        host => "10.1.19.18"
        protocol => "http"
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        workers => 5
        template_overwrite => true
    }
    #stdout { codec =>rubydebug }
}  定义结构化的日志存储到elasticsearch对于不匹配grok的日志写入到文件。
  注意后面添加的过滤器文件名要位于01-99之间。因为logstash配置文件有顺序的。
  在调试时候先不将日志存入到elasticsearch而是标准输出以便排错。
  同时多看看日志很多错误在日志里有体现也容易定位错误在哪。
  在启动logstash服务之前最好先进行配置文件检测如下
/opt/logstash/bin/logstash --configtest -f /etc/logstash/conf.d/*
Configuration OK  也可指定文件名检测直到OK才行。不然logstash服务器起不起来。
  最后就是启动logstash服务了。
systemctl start logstash  然后就是配置Logstash-forwarder客户端了。
  安装logstash-forwarder
wget https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder-0.4.0-1.x86_64.rpm
rpm -ivh logstash-forwarder-0.4.0-1.x86_64.rpm  需要将在安装logstash时候创建的ssl证书的公钥拷贝到每台logstash-forwarder服务器上。
scp 192.168.100.233:/etc/pki/tls/certs/logstash-forwarder.crt /etc/pki/tls/certs/  配置logstash-forwarder
vi /etc/logstash-forwarder.conf
{
  "network": {
    "servers": [ "10.1.19.18:5043" ],
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
    "timeout": 30
  },
  "files": [
    {
        "paths": [ "/alidata/logs/nginx/*-access.log" ],
        "fields": { "type": "nginx" }
    }
  ]
}  这也是个json个是的配置文件。json格式不对logstash-forwarder服务是启动不起来的。
  后面就是启动logstash-forwarder服务了。
  当上面的所有都配置正确的话就可以访问kibana来查看数据了。
  访问效果如下所示






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668543-1-1.html 上篇帖子: ELK 之 LogStash 下篇帖子: 离线部署ELK+kafka日志管理系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表