nginx:

  1. #直接yum安装:
  2. [root@elk-node1 ~]# yum install nginx -y
  3. 官方文档:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format
  4. #修改配置文件的日志格式:
  5. vim /etc/nginx/nginx.conf
  6. #在http模块中添加
  7. log_format json '{"@timestamp":"$time_iso8601",'
  8. '"@version":"1",'
  9. '"client":"$remote_addr",'
  10. '"url":"$uri",'
  11. '"status":"$status",'
  12. '"domain":"$host",'
  13. '"host":"$server_addr",'
  14. '"size":$body_bytes_sent,'
  15. '"responsetime":$request_time,'
  16. '"referer": "$http_referer",'
  17. '"ua": "$http_user_agent"'
  18. '}';
  19. #在server模块中添加
  20. access_log /home/wwwlogs/access_json.log json;
  21. #修改后的nginx.conf文件
  22. [root@elk-node1 ~]# grep -Ev "#|^&" /etc/nginx/nginx.conf
  23. user www www;
  24.  
  25. worker_processes auto;
  26.  
  27. error_log /home/wwwlogs/nginx_error.log crit;
  28.  
  29. pid /usr/local/nginx/logs/nginx.pid;
  30.  
  31. #Specifies the value for maximum file descriptors that can be opened by this process.
  32. worker_rlimit_nofile 51200;
  33.  
  34. events
  35. {
  36. use epoll;
  37. worker_connections 51200;
  38. multi_accept on;
  39. }
  40.  
  41. http
  42. {
  43. log_format json '{"@timestamp":"$time_iso8601",'
  44. '"@version":"1",'
  45. '"client":"$remote_addr",'
  46. '"url":"$uri",'
  47. '"status":"$status",'
  48. '"domain":"$host",'
  49. '"host":"$server_addr",'
  50. '"size":$body_bytes_sent,'
  51. '"responsetime":$request_time,'
  52. '"referer": "$http_referer",'
  53. '"ua": "$http_user_agent"'
  54. '}';
  55. include mime.types;
  56. default_type application/octet-stream;
  57.  
  58. server_names_hash_bucket_size 128;
  59. client_header_buffer_size 32k;
  60. large_client_header_buffers 4 32k;
  61. client_max_body_size 50m;
  62.  
  63. sendfile on;
  64. tcp_nopush on;
  65.  
  66. keepalive_timeout 60;
  67.  
  68. tcp_nodelay on;
  69.  
  70. fastcgi_connect_timeout 300;
  71. fastcgi_send_timeout 300;
  72. fastcgi_read_timeout 300;
  73. fastcgi_buffer_size 64k;
  74. fastcgi_buffers 4 64k;
  75. fastcgi_busy_buffers_size 128k;
  76. fastcgi_temp_file_write_size 256k;
  77.  
  78. gzip on;
  79. gzip_min_length 1k;
  80. gzip_buffers 4 16k;
  81. gzip_http_version 1.1;
  82. gzip_comp_level 2;
  83. gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
  84. gzip_vary on;
  85. gzip_proxied expired no-cache no-store private auth;
  86. gzip_disable "MSIE [1-6]\.";
  87.  
  88. #limit_conn_zone $binary_remote_addr zone=perip:10m;
  89. ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.
  90.  
  91. server_tokens off;
  92. access_log on;
  93.  
  94. server
  95. {
  96. listen 80 default_server;
  97. #listen [::]:80 default_server ipv6only=on;
  98. server_name _;
  99. index index.html index.htm index.php;
  100. root /home/wwwroot/default;
  101.  
  102. #error_page 404 /404.html;
  103.  
  104. # Deny access to PHP files in specific directory
  105. #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
  106.  
  107. include enable-php.conf;
  108.  
  109. location /nginx_status
  110. {
  111. stub_status on;
  112. access_log off;
  113. }
  114.  
  115. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  116. {
  117. expires 30d;
  118. }
  119.  
  120. location ~ .*\.(js|css)?$
  121. {
  122. expires 12h;
  123. }
  124.  
  125. location ~ /.well-known {
  126. allow all;
  127. }
  128.  
  129. location ~ /\.
  130. {
  131. deny all;
  132. }
  133.  
  134. #access_log /home/wwwlogs/access.log;
  135. access_log /home/wwwlogs/access_json.log json;
  136. }
  137. include vhost/*.conf;
  138. }
  139. #启动:
  140. [root@controller ~]# systemctl start nginx
  141. root@elk-node1 ~]# ss -lntp|grep 80
  142. LISTEN 0 511 *:80 *:* users:(("nginx",pid=8045,fd=6),("nginx",pid=8044,fd=6),("nginx",pid=8043,fd=6))
  143. LISTEN 0 511 :::80 :::* users:(("nginx",pid=8045,fd=7),("nginx",pid=8044,fd=7),("nginx",pid=8043,fd=7))

  

0.安装前的准备:

CentOS7操作系统
jdk1.8(elasticsearch-5.1.1、logstash-5.1.1需要jdk1.8环境的支持)
去官网下载ELK(elasticsearch-5.1.1、logstash-5.1.1、kibana-5.1.1) 地址:https://www.elastic.co/downloads 。这里推荐下载.tar.gz后缀的,安装比较方便(注:jdk1.8推荐下载.rpm后缀的。CentOS7一般自带jdk1.8的(终端输入:java -version 查看如果版本是jdk 1.8 则可以跳过第一步1.jdk1.8的安装,进行第2步的安装)。
1.jdk1.8的安装:
直接在oracle的官网去下载jdk1.8。地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 如图:

注:这里有两种压缩格式(.tar.gz、.rpm)。这里简单说明一下:
1、*.rpm形式的源代码软件包

安装:

rpm -ivh *.rpm
卸载:

rpm -e packgename
2、.tar.gz/.tgz、*.bz2形式的源代码软件包

安装:

tar zxvf *.tar.gz 或 tar yxvf *.bz2` //先解压
//然后进入解压后的目录: cd 你解压的目录
./configure //配置
make //编译
make install //安装

可以看出使用.rpm的压缩包安装要简单一些,不需要经过配置、编译等过程。所以这里下载的jdk包直接下的.rpm后缀的。
下载好jdk-8u112-linux-x64.rpm后,使用下面的命令进行安装:

rpm -ivh jdk-8u112-linux-x64.rpm //前提是你要进入到你的jdk下载目录下

配置java环境:

  1. export NODE_HOME=/usr/local/node-v8.10.0
  2. export JAVA_HOME=/usr/local/jdk
  3. export PATH=$PATH:$JAVA_HOME/bin:$NODE_HOME/bin
  4. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  1. source /etc/profile

  

使用下面的命令检查是否安装成功:

java -version

显示如下,则证明jdk1.8已经安装到你的CentOS7中了。

2.1.elasticsearch-5.1.1的安装:
下载好elasticsearch-5.1.1.tar.gz后,使用下面的命令:

tar -xzf elasticsearch-5.1.1.tar.gz //解压。注意要cd进入你的elasticsearch-5.1.1.tar.gz下载目录才能解压

cd elasticsearch-5.1.1 //进入刚才解压的目录
[root@localhost elasticsearch-5.1.1]# ./bin/elasticsearch //运行 ,启动的时候系统可能会卡住,耐心等待就好了

注意,上面运行后会出现这样的错误:can not run elasticsearch as root ,错误很明显,不能以root用户运行elasticsearch 。所以我们这里要新建一个用户组,及用户。如下:

  1. groupadd elsearchgroup //添加名为elsearchgroup的组
  2. useradd -g elsearchgroup elsearchuser //在elsearchgroup组中添加一个elsearchuser用户
  3. passwd elsearchuser //更改elsearchuser的密码
  4. su elsearchuser //从root用户切换到elsearchuser用户
  5. [elsearchuser@localhost elasticsearch-5.1.1]$ ./bin/elasticsearch //在elsearchuser下运行elasticsearch

  

这时候可能还会报像这样的错误:AccessDeniedException …. 。原因是你的文件访问权限问题(因为你刚才是在root用户下解压的这些目录,读写权限root用户拥有,而你更换了用户角色,所以就没权限了)。更改一下访问权限就可以了。

  1. chown -R elsearchuser:elsearchgroup elasticsearch-5.1.1//更改elasticsearch-5.1.1目录及其子目录的所属组为elsearchgroup,所述用户为elsearchuser
  2. chmod -R 777 elasticsearch-5.1.1 //-R参数 和 777 结合表示把elasticsearch-5.1.1目录及其子目录的权限设置为完全可读写。

再次启动,效果如下:


验证:打开浏览器输入localhost:9200 ,得到下图则表明elasticsearch-5.1.1安装成功:

2.2.elasticsearch-5.1.1的比较重要的配置:

elasticsearch-5.1.1有两个配置文件:elasticsearch.yml、log4j2.properties。 位置在elasticsearch-5.1.1/config目录下。
elasticsearch.yml配置文件下比较重要的配置如下:

path.data 和 path.logs
cluster.name
node.name
bootstrap.memory_lock
network.host
discovery.zen.ping.unicast.hosts
discovery.zen.minimum_master_nodes
2.2.1.path.data 和 path.logs:
我们使用的.tar.gz格式的压缩包安装的elasticsearch-5.1.1。解压出来默认的目录结构都是默认组织在elasticsearch-5.1.1目录下的。如下图:

可以看到data和logs目录都在默认的elasticsearch-5.1.1目录下。如果我们就使用这样的默认目录结构保存我们的数据(data)和日志(logs),当我们更新我们的elasticsearch-5.1.1到更新的版本后,data和logs就很大的风险被新的版本覆盖。所以我们应该更改elasticsearch.yml配置文件的下的path.data 和 path.logs的路径,避免使用默认的路径。例:

  1. path.data: /usr/worksapces/elsearch5.1.1/data //去掉#,更改路径
  2. path.logs: /usr/worksapces/elsearch5.1.1/logs

  

2.2.2.cluster.name :
集群(cluster)是一个或多个节点(node)(server:服务器)的集合,它们一起保存整个数据,并在所有节点上提供联合索引和搜索功能。集群默认名为:elasticsearch。cluster.name 就是来更改默认的名称为我们想要的名称的。群集的名称不能重复。如果一个节点是通过设置集群名来加入该集群,那么该节点只能是该群集的一部分。例:

cluster.name: logging-prod
1
2.2.3.node.name:
节点(node)就是一个单一的服务器(比如我们拿自己的电脑启动了elasticsearch,我们的电脑就相当于一个节点),它是集群的一部分。它能存储数据,并参与群集的索引和搜索功能。节点的默认名是随机的UUID(random Universally Unique IDentifier)。一个节点只能加入一个集群。通过node.name来更改默认的名称。 例:

node.name: prod-data-2
1
2.2.4.bootstrap.memory_lock
2.2.5.network.host
默认的就是127.0.0.1(localhost),即本地。但是为了与其他服务器上的节点进行通信并形成集群,所以我们应该更改network.host,例如:

network.host: 192.168.233.134 //自己在网络上的ip,这里给的是自己电脑(节点)在局域网内的ip

关于如何查看你电脑的ip地址:打开电脑设置—>网络。如图:

注意:如果你更改了network.host的配置,elasticsearch就会认为你已经从开发环境转到了生成环境,以前在开发环境(localhost:9200)被忽略的警告(warning),将被升级为错误(error)。这样在开发环境可能能运行elasticsearch,但到了生产环境就不能运行了。elasticsearch这样做,是出于安全考虑,避免因为你忽略的警告而造成数据的丢失。
更改network.host可能会遇到下面的错误:
错误1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]。
解决错误1:
打开/etc/security/limits.conf文件,添加以下两行代码并保存:

* soft nofile 65536 //* 表示任意用户,这里是elasticsearch报的错,也可以直接填运行elasticsearch的用户。如:
* hard nofile 131072

错误2:memory locking requested for elasticsearch process but memory is not locked
解决错误2:修改elasticsearch.yml文件

bootstrap.memory_lock : false

错误3:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决错误3:终端输入以下命令:

sysctl -w vm.max_map_count=262144 //需要root权限
sysctl -a|grep vm.max_map_count //查看修改结果,可选

2.2.6.discovery.zen.ping.unicast.hosts
如果没有任何网络配置,Elasticsearch将扫描端口9300到9305来连接到同一台服务器上运行的其他节点,这其实就是在我们没有进行任何网络配置的情况下,给了我们一个自动的群集(auto-clustering)体验。
当你要将网络上多个在其它服务器上的节点建立起一个集群的时候,你必须将这些节点一一罗列出来:例:

discovery.zen.ping.unicast.hosts:
- 192.168.1.10:9300
- 192.168.1.11 //默认使用9300端口

可以通过这些节点来自动发现新加入集群的节点。
2.2.7.discovery.zen.minimum_master_nodes
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。例:

discovery.zen.minimum_master_nodes: 3

3.kibana-5.1.1的安装:
将下载好的kibana-5.1.1.tar.gz解压:

  1. tar -xzf kibana-5.1.1.tar.gz //解压
  2. cd kibana-5.1.1
  3. ./bin/kibana //运行

  

kibana与elasticsearch的连接:
修改kibana-5.1.1/config目录下的kibana.yml文件:

elasticsearch.url: "http://localhost:9200" //elasticsearch的ip地址 ,暂时我只能使用localhost连同,更改了elasticsearch.yml文件的ip地址始终连不通。故前面的elasticsearch.yml配置文件我最后只改了path.data,path.logs 以及node.name 其它都是默认。连通如下图:

这里有个警告:Warning No default index pattern. You must select or create one to continue.
解决方法:

检查logstash与elasticsearch之间的通讯是否有问题(查看4.logstash-5.1.1的安装处),一般问题就在这。

4.logstash-5.1.1的安装:

  1. tar -xzf logstash-5.1.1.tar.gz
  2. ./bin/logstash -f config/elktest.conf //运行config目录下的elktest.conf文件 。

  

//附:elktest.conf文件内容如下

  1. # Set:
  2. input {
  3. #stdin {} //控制台输入,因为这里只是做ELK连通测试,所以输入端就简单的使用控制台。例如下面是收集log4j日志的输入配置(这里将其注释掉)。
  4. file {
  5. path => "/home/wwwlogs/access_json.log"
  6. codec => json
  7. start_position => "beginning"
  8. type => "nginx-log"
  9. }
  10. }
  11. filter {
  12. #Only matched data are send to output.
  13. }
  14.  
  15. output {
  16. elasticsearch {
  17. action => "index"
  18. hosts => "localhost:9200"
  19. index => "nginx-log"
  20. }
  21. }

  

5.查看ELK是否成功配置

可以看到我们在logstash步配置的index,以及在输入的测试内容。


至此ELK已经配通了。关于logstash使用input、output等配置来收集其他应用(比如Apache、Log4j等的日志)产生的日志,请看官方文档,我也还在学习当中。

6.参考:
ELK的官方文档:https://www.elastic.co/learn
elasticsearch配置文件详解:http://www.cnblogs.com/sunxucool/p/3799190.html

CentOS7下安装ELK(nginx 、elasticsearch-5.1.1、logstash-5.1.1、kibana-5.1.1)的更多相关文章

  1. centos7 下 安装部署nginx

    centos7 下 安装部署nginx 1.nginx安装依赖于三个包,注意安装顺序 a.SSL功能需要openssl库,直接通过yum安装: #yum install openssl b.gzip模 ...

  2. CentOS7下安装ELK三件套

    ELK用于分布式收集,然后elasticsearch用于分析数据,在Kibana中可以查看数据.报表. 目前公司日志数据量暂时不使用elasticsearch集群,只是用的elasticsearch单 ...

  3. CentOS7下安装配置Nginx

    一:安装依赖项 1.pcre:2.openssl:3.zlib:4.gcc:可直接通过yum安装 二:创建nginx账户(可以配置nginx.conf的user为此账户) useradd nginx ...

  4. Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台

    日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常 ...

  5. centOS7下 安装nodejs+nginx+mongodb+pm2部署vue项目

    一.购买服务器并远程连接 1.购买服务器和域名 可以选择阿里云或者是其他的厂商的服务器.然后会获得服务器ip地址,用户名和密码. 购买域名,将域名绑定到ip地址上. 2.下载xshell,winscp ...

  6. 学习笔记(1)centos7 下安装nginx

    学习笔记(1)centos7 下安装nginx 这里我是通过来自nginx.org的nginx软件包进行安装的. 1.首先为centos设置添加nginx的yum存储库 1.通过vi命令创建一个rep ...

  7. Windows和Linux(Centos7)下安装Nginx

    安装Nginx 这篇记录只不过做了一个简单总结,如果对这块没什么概念的话可以看一下知乎的这篇文章 https://zhuanlan.zhihu.com/p/83890573 window下安装 win ...

  8. centos7下安装php+memcached简单记录

    1)centos7下安装php 需要再添加一个yum源来安装php-fpm,可以使用webtatic(这个yum源对国内网络来说恐怕有些慢,当然你也可以选择其它的yum源) [root@nextclo ...

  9. 在Centos7下安装与部署.net core

    在Centos7下安装与部署.net core 2018年02月28日 19:36:16 阅读数:388 个人安装流程,参照文档 https://www.cnblogs.com/Burt/p/6566 ...

随机推荐

  1. PHP的垃圾回收机制之引用计数

    1,介绍 php的垃圾回收机制(GC)是在PHP5之后出现的,而在PHP5.3版本之前使用的都是“引用计数”的方式.实现引用计数的实质就是在每个内存对象中都有一个计数器,当内存对象被变量引用时,计数器 ...

  2. 第五次个人作业- Alpha项目测试

    这个作业属于哪个课程 课程链接 这个作业要求在哪里 作业要求链接 团队名称 西柚排课王 测试人姓名 刘洋 测试人学号 201731062314 一.测试项目 测试项目 团队名 第二次Alpha发布博客 ...

  3. php代理模式(proxy design)

    结构模式最后一个,接着进入行为模式. <?php /* The proxy design pattern functions as an interface to an original obj ...

  4. JPA(java持久化API)的环境的搭建

    因为我使用的是java工程 所以需要引入的依赖有: <properties> <project.build.sourceEncoding>UTF-8</project.b ...

  5. Gym - 101848D:XOR(线性基 欧拉降幂)

    题意:给定N,K,P,表示现在有一个集合{0, 1, ..., 2n - 1},问有多少个非空子集的异或和为K: 答案%P.(1 ≤ n ≤ 1018, 0 ≤ k ≤ min(2n - 1, 101 ...

  6. openstack环境下搭建的keepalived 两台服务器直接无法ping通VIP ALLOWED-ADDRESS-PAIRS

    真的是搞了很久 结果一问人才知道真的是neutron的问题 当然前提是设置unicast 而不是默认设置 先贴出来后面再更新图片 [root@haproxy1 ~]# cat /etc/keepali ...

  7. PHP数组操作类

    class ArrayHelper{           /**      * 从数组中删除空白的元素(包括只有空白字符的元素)      *      * 用法:      * @code php ...

  8. CustomHTTPProtocol

    http://blog.csdn.net/jingcheng345413/article/details/54967739 一.概念 NSURLProtocol也是苹果众多黑魔法中的一种,使用它可以轻 ...

  9. Type Encodings

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles ...

  10. react native 开发问题分类

    链接.编译.部署.运行: 一.语法问题:编译问题 二.链接问题: yarn add react-navigation react-native link react-navigation 三.部署问题 ...