Kurulumlar – Vahap Öç – Exevolium https://exevolium.com #windows, #linux, #hosting, #cloud, #database, #vmware Wed, 17 Sep 2025 11:02:17 +0000 tr hourly 1 https://wordpress.org/?v=7.0.2 https://exevolium.com/wp-content/uploads/2017/03/favicon1.png Kurulumlar – Vahap Öç – Exevolium https://exevolium.com 32 32 From CloudTrail Logs to Automated Alerts with AWS EventBridge https://exevolium.com/from-cloudtrail-logs-to-automated-alerts-with-aws-eventbridge/ Tue, 16 Sep 2025 20:05:52 +0000 https://exevolium.com/?p=1595 Hello everyone,

In this article, I will guide you through how to receive notifications for operations or events occurring across various AWS services, such as the creation, deletion, or modification of resources like RDS, EC2, S3, ECR, ECS, etc. I’ll also cover how to reduce associated costs and improve manageability throughout the process. Or, for example, you can receive notifications when the security groups you created are modified and all security groups are changed to 0.0.0.0/0.

AWS services referenced in this guide:

  1. Amazon EventBridge
  2. AWS Organizations (Optional)
  3. AWS Cloudtrail
  4. Amazon SNS
  5. AWS Lambda
  6. AWS CloudFormation (Optional)

At its simplest, we’ll capture the logs sent to CloudTrail by defining a specific Rule within an EventBridge Bus.

If you want to act on an event that occurs in the same account, you can route those logs directly to the AWS service that should handle them.

When the goal is to gather events in a central account, such as an organization’s management account or a dedicated security hub, and then trigger actions, you can forward them across accounts to the appropriate EventBridge Bus.

In this guide, we’ll look at two common scenarios:

  1. Collecting and processing actions that happen within a single AWS account.
  2. Collecting and processing actions from all accounts linked to an AWS Organization.

Before starting on to the explanation, I will also share information about the services we will use. You will understand why I am explaining these services and their details. BUT if you already know these, click here for the steps! 🙂


1. AWS EventBridge:

Amazon EventBridge is a fully managed, serverless event bus that lets different AWS services and applications communicate through events. For example, when someone uploads a file to S3, updates a database, or signs in through the console, EventBridge can capture that activity and route it to the appropriate destination such as a Lambda function, an SQS queue, or a Step Functions workflow.

EventBridge is built around four key elements:

  • Event – Any change or operation in a system (e.g., “A file was added to S3”).
  • Event Bus – A logical channel that receives events and applies rules.
  • Rule – Defines which events to look for and which targets should respond.
  • Target – The AWS service or application that acts on the event (for example, Lambda, SQS, or SNS).

a. EventBridge Rules

Rules filter incoming events and forward only the ones that match specific criteria to their targets. This makes it possible to automate workflows and respond only to the events that matter.

b. EventBridge Buses

An Event Bus is the channel that carries events. There are three types:

  • Default bus – Collects events from AWS services in your account.
  • Custom bus – Created for events generated by your own applications.
  • Partner bus – Handles events coming from supported SaaS providers.

In the following sections, we’ll decide whether to use a custom or the default bus based on the requirements of our setup.


2. AWS Organizations:

AWS Organizations makes it easy to manage multiple AWS accounts from a single place.

With it, you can:

  • Create new AWS accounts and organize them into Organizational Units (OUs).
  • Simplify billing by combining charges across all accounts with Consolidated Billing.
  • Apply organization-wide rules through Service Control Policies (SCPs), which can restrict or allow actions beyond the permissions defined in individual accounts.

Service Control Policies (SCPs) act as guardrails for your organization. They specify which services and actions are available to certain accounts or OUs. SCPs are evaluated alongside, but separate from, IAM policies: even if an IAM policy grants access, the request won’t succeed unless the SCP also allows it. In effect, SCPs serve as a top-level filter, defining the absolute boundaries of what’s possible inside your AWS Organization.


3. AWS Cloudtrail:

In AWS, most actions you perform are automatically recorded by CloudTrail, which keeps API activity logs for 90 days by default. Every action you take -whether through the SDK, CDK, CLI, or the Management Console- is captured there. In short, CloudTrail is the service that collects and displays timestamped API logs across AWS, supporting auditing and governance requirements. It’s also compliant with PCI/DSS standards.

CloudTrail groups events into four main types:

  • Network activity events
    Record network operations performed on resources via VPC endpoints, providing insight into resource activity at the network layer.
  • Management events
    Track administrative operations on AWS resources, such as creating users or roles, updating security groups, or attaching IAM policies.
  • Data events
    Log interactions within or on top of a resource for example, reading or writing an S3 object or invoking a Lambda function.
  • Insights events
    Detect and report unusual account activity, spikes in errors, or other anomalous user behavior.

If you want to receive notifications about actions across all accounts in an AWS Organization, you’ll need to create a trail from the management account. This trail will automatically apply to all member accounts, though additional costs may apply. To keep expenses and storage low, you can configure the trail to monitor only “Write” actions, which reduces the size of the log files stored in your S3 bucket. Keep in mind that CloudTrail trails are region-specific, so you must create them separately in each AWS region you use.


4. Amazon SNS:

  • Amazon SNS (Simple Notification Service) is AWS’s fully managed publish/subscribe messaging and notification platform.
  • Endpoints that subscribe to a topic -such as email, SMS, Lambda, SQS, or HTTP/S webhooks- receive messages right away.
  • It’s designed for high scalability, low latency, and reliable delivery.
  • SNS is especially useful for application-to-application communication, event notifications, and push-based mobile alerts.

5. AWS Lambda:

AWS Lambda is Amazon’s serverless compute service.

  • You upload your code -written in Node.js, Python, Java, .NET, Go, Ruby, or other supported languages- and Lambda runs it only when it’s triggered (for example, by an S3 file upload, an API Gateway request, or an EventBridge event).
  • It scales automatically, creating as many instances as needed to handle incoming requests.
  • Pricing is based on how long your code runs and the resources it consumes, such as memory and CPU.

6. AWS Cloudformation:

AWS CloudFormation is a service that lets you define and manage AWS resources using the Infrastructure as Code approach.

  • You describe your resources -such as EC2, S3, IAM, RDS, Lambda or etc.- in a template file written in YAML or JSON.
  • Based on that template, CloudFormation automatically provisions, updates, and removes the resources as needed.
  • It’s an effective way to set up complex environments quickly, manage infrastructure changes safely, and put Infrastructure as Code into practice.

Setup Part:

a. Collecting and processing actions that happen within a single AWS account:

We’ll start with CloudTrail. As noted earlier, CloudTrail keeps the event history for 90 days by default. Because we’re going to act within the same account, there’s no need to create a dedicated trail. In this scenario, CloudTrail won’t introduce any additional cost.

Next, we move on to EventBridge Rules. Here we’ll create a rule to catch the actions we care about. In this case, we want notifications both when an EC2 instance changes state (e.g., a new instance is launched or an instance is started) and when there’s an issue in EKS with add-ons like CoreDNS, VPC CNI, or kube-proxy.

After confirming you’ve selected the active AWS Region you’re using, open the EventBridge service and go to the Rules section to create the rule.

Create a new rule with a clear name, just as shown above, and select the appropriate Event Pattern.

On the next page, decide what action should be taken when this event is captured. In our example, we’ll send an email notification through SNS.
If you prefer, you can forward the event to a Lambda function, parse its contents, and trigger other actions such as sending an email via SES, restarting or stopping an instance when you’re monitoring shutdown events, or handling spot instance interruptions by running a custom workflow.

Be sure to review the Event type section for each service so you understand exactly which events you’re targeting.

If you want to receive plain-text notifications through SNS, open the SNS service in a new browser tab (keep your current tab open) and create a topic and subscription similar to the example above.

After setting up the subscription, return to the EventBridge console, go to the Select Target(s) step, and click the refresh icon next to the Topic field. If the topic was created in the correct region, it should appear there. Click Next to finish creating the rule. Also note that once you create a subscription in SNS, an email confirmation will be sent to the address you specified. You’ll need to confirm that email before messages can be delivered.

When everything is set up, you’ll receive an email that looks like the one shown below:

If you’re not satisfied with the plain email format, you can choose Lambda in the Select Target(s) step within EventBridge. From there, have the Lambda function read and parse the message, then generate an HTML email template. You can send it using SES or connect to another mail server via the SMTP protocol. For example:


b. Collecting and processing actions from all accounts linked to an AWS Organization:

Since you manage your AWS environment with AWS Organizations and have multiple accounts, I’ll walk through the steps assuming you’re already familiar with many services and operations, without dwelling too much on the basics.

The benefit of AWS Organizations is that all member accounts can be administered from a single management account as noted earlier. In this setup, you should create CloudTrail trails from the Organizations management account. This aggregates activity from all member accounts into the management account, letting you view actions across the entire organization in one place. Note that this can incur additional charges. To keep costs down, if you only need to track changes, it’s sufficient to log only Write events. That approach also keeps the S3 log files smaller and reduces the number of captured API requests. You can also disable unused AWS Regions via SCPs in AWS Organizations, so you don’t need to create trails in those regions. And yes, CloudTrail trails are regional, so you must create them separately in each AWS Region you use.

To create trails, in your management account, search for CloudTrail, click Trails on the left, and choose Create to start the process. On the creation page, select “Enable for all accounts in my organization.”

After completing this step, go back to the EventBridge service in your management account and click on Event Bus. This is where you’ll gather events coming from your other accounts that are routed through EventBridge.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "AllowSpecificAccountsToPutEvents",
    "Effect": "Allow",
    "Principal": {
      "AWS": ["arn:aws:iam::LINKEDACCOUNTID1:root", "arn:aws:iam::LINKEDACCOUNTID2:root", "arn:aws:iam::LINKEDACCOUNTID3:root", "arn:aws:iam::LINKEDACCOUNTID4:root"]
    },
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:YOURREGIOINID:ORGACCOUNTID:event-bus/YOUREVENTBUSNAME"
  }]
}

Now add a rule to the Event Bus we just created.
For example, this time let’s receive a notification whenever an Amazon Redshift cluster is created.

In the next step, you can either select SNS to receive plain-text notifications, or send the event to a Lambda function, parse the payload, and email yourself an HTML template via SES as outlined earlier.

There’s one important detail:
For the EventBridge execution role you create, you must allow EventBridge to assume the role (trust policy) and grant it permission to either publish to SNS or invoke your Lambda function. In other words, the role’s Trusted Relationship should allow EventBridge, for example:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "TrustEventBridgeService",
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "YOURORGANIZATIONACCOUNTID"
                },
                "StringLike": {
                    "aws:SourceArn": [
                        "arn:aws:events:YOURREGION:YOURORGANIZATIONACCOUNTID:rule/YOUREVENTBRIDGEBUSNAME/YOUREVENTNAME"
                    ]
                }
            }
        }
    ]
}

With this step, we wrap up the configuration in the management account.
Now move on to the member accounts and create the same EventBridge rule there but with one key difference: instead of handling the events locally, configure the rule to forward any captured events to the EventBridge bus in the management account.

The role you’ll use here should have the following Trust Relationship, and its policy should be set as shown below:

  • Trust Relationship:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "YOURLINKEDACCOUNTID"
                },
                "StringLike": {
                    "aws:SourceArn": [
                        "arn:aws:events:eu-central-1:YOURLINKEDACCOUNTID:rule/YOUREVENTBRIDGENAME"
                    ]
                }
            }
        }
    ]
}
  • IAM Policy:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "events:PutEvents"
            ],
            "Resource": [
                "arn:aws:events:eu-central-1:YOURORGANIZATIONACCOUNTID:event-bus/YOUREVENTBRIDGEBUSNAME"
            ]
        }
    ]
}

Your AWS Organization may include more than 100 accounts. To help you understand the logic behind this setup, I’ve explained how to configure it through the console. However, you can also use CloudFormation StackSets from the management account to deploy the EventBridge rule and IAM role directly to your member accounts.

If you want to prevent even users with AdministratorAccess in those accounts from modifying this configuration, you can create a Service Control Policy (SCP) in AWS Organizations. To do this, go to your management account, open Organizations, and under Policies, choose Service Control Policies.

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Deny",
			"Action": [
				"events:DeleteRule",
				"events:DisableRule",
				"events:PutTargets",
				"events:PutRule",
				"events:DescribeRule",
				"events:RemoveTargets"
			],
			"Resource": [
				"arn:aws:events:*:*:rule/EVENTRULENAME"
			]
		},
		{
			"Effect": "Deny",
			"Action": [
				"cloudtrail:DeleteTrail",
				"cloudtrail:StopLogging",
				"cloudtrail:UpdateEventDataStore"
			],
			"Resource": [
				"arn:aws:cloudtrail:*:*:trail/CLOUDTRAILNAME"
			]
		},
		{
			"Effect": "Deny",
			"Action": [
				"iam:DeleteRole",
				"iam:UpdateRole",
				"iam:UpdateRoleDescription",
				"iam:AttachRolePolicy",
				"iam:DeletePolicy",
				"iam:DeletePolicyVersion",
				"iam:DeleteRolePolicy",
				"iam:PutRolePolicy",
				"iam:GetPolicy",
				"iam:GetRolePolicy",
				"iam:CreatePolicyVersion"
			],
			"Resource": [
				"arn:aws:iam::*:role/service-role/IAMROLENAME",
				"arn:aws:iam::*:policy/service-role/IAMPOLICYNAME"
			]
		}
	]
}

I hope these article help save you time.


References:

]]>
High Availability Nginx (Corosync, Pacemaker ve DRBD Cluster) Yapılandırması https://exevolium.com/high-availability-nginx-corosync-pacemaker-ve-drbd-cluster-yapilandirmasi/ Mon, 04 Mar 2019 17:20:13 +0000 http://exevolium.com/?p=1505 Merhaba,

Daha önce High Availability HAProxy-Keepalived Kurulumu ve Yapılandırması başlığı adı altında HAProxy yedekliliği ile iki veri merkezi üzerinde isteğe göre aktif-aktif veya aktif-pasif bir yapı kurulumundan bahsetmiştim. Bu anlatımda da High Availability bir ortamın iki node üzerine kurulumundan bahsedeceğim ve bu anlatım Corosync-Pacemaker kurulumu ve DRBD kurulumu olmak üzere iki kısımdan oluşuyor. İşlemlere başlamadan önce aşağıdaki makalede geçen işlemleri gerçekleştirmelisiniz. DRBD (disk replikesine) ihtiyacım yok derseniz bu anlatımı direkt uygulayabilirsiniz.

DRBD ile Disk Replikasyon Yapılandırması ve Kurulumu

Makalede geçen işlemleri tamamladıktan sonra şimdi Corosync-Pacemaker ve Nginx kurulumuna geçebiliriz.

Bu anlatımda “Web Sunucu HA” kurmaktan bahsettim. Aynı senaryoyu veritabanı veya başka servisler için de kullanabilirsiniz.

DRBD anlatımında olduğu gibi sunucuların hosts dosyalarını ve hostnamelerini düzenlemeyi, Selinux’u disable etmeyi ve sunucuların birbirleriyle ALL konuşmalarını sağlamayı unutmayın.

192.168.0.69 nginx1.vahap.net nginx1
192.168.0.72 nginx2.vahap.net nginx2
192.168.0.63 Floating IP

Nginx’in son sürümünü yükleyebilmek için aşağıdaki işlemi uygulayın.

Nginx kurulumu için /yum.repos.d/ altına nginx.repo adına dosya oluşturun:
nano /etc/yum.repos.d/nginx.repo

Aşağıdaki repo tanımını kopyalayın ve bu dosya içine yapıştırın.

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

yum -y update
yum -y install nginx
systemctl start nginx
systemctl enable nginx

Kurulumu tamamladıktan sonra ilk makinada ilk komutu, ikinci makinada da ikinci komutu kullanın.

echo 'web01 - voc-labs' > /usr/share/nginx/html/index.html
echo 'web02 - voc-labs' > /usr/share/nginx/html/index.html

Bu işlemden sonra corosync, pacemaker ve pcsd kurun. Sırasıyla uygulayın.

yum -y install corosync pacemaker pcs

systemctl enable corosync
systemctl enable pacemaker
systemctl enable pcsd
systemctl start pcsd
passwd hacluster

İşlemi iki sunucuda gerçekleştirin ve hacluster’a şifre verin ve bu adımdan sonraki işlemleri sadece primary makinada uygulayın.

pcs cluster auth nginx1 nginx2
pcs cluster setup --name vahap-cluster nginx1 nginx2
pcs cluster start --all
pcs cluster enable --all
pcs status cluster

Bu işlem sonunda STONITH disable etmelisiniz.

pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
pcs property list

Bu işlem sonunda floating IP eklemeniz gerekecek. Bunun içinde bir public IP belirleyin. Bu IP’yi Load Balancer IP’si gibi düşünebilirsiniz. Arka tarafta heartbeat paket gönderip, hangi sunucu IP’si aktifse trafiği onun üzerinden sunuyor. Sırasıyla ve uygun yerleri düzelterek komutu uygulayın.

pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.0.63 cidr_netmask=32 op monitor interval=30s
pcs resource create web ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf op monitor timeout="5s" interval="5s"
pcs status resources
pcs constraint colocation add web virtual_ip INFINITY
pcs constraint order virtual_ip then web
pcs cluster stop --all
pcs cluster start --all
pcs status resources

Bu adımdan sonra süreç tamamlanmıştır. Şimdi testleri gerçekleştirelim.

pcs status nodes
corosync-cmapctl | grep members
pcs status corosync

Tarayıcıya sunucuların IPlerini yazdığımda Nginx’in cevap verdiğinden emin olduktan sonra floating IP’yi yazıyorum. Nginx 1’in cevap verdiğini görüyorum.

Test amacıyla web01 makinasını cluster üzerinde down hale getirin. Eğer floating IP ikinci web makinasından cevap vermeye başlarsa işlem tamamdır.

İşlem sonunda node1 aktif etmek için de aşağıdaki komutu node1 makinasında uygulamalısınız.

<strong>pcs cluster start nginx1</strong>

Umarım zamandan kazanmanızı sağlar.

]]>
High Availability HAProxy-Keepalived Kurulumu ve Yapılandırması https://exevolium.com/high-availability-haproxy-load-balancer-kurulumu-ve-yapilandirmasi/ Sun, 10 Feb 2019 12:51:32 +0000 http://exevolium.com/?p=1486 Merhaba,

Çoğu sistemi incelediğimde, web ve veritabanı ortamları yedekli çalışacak veya cluster olacak şekilde yapılandırılıyor. Ancak işin üst segmenti olan yük dengeleyici ve dns mimarisinin performans ve erişilebilirliği çok incelenmiyor.

İşte bu anlatımda iki farklı veri merkezi üzerinde çalışan (örneğin 2 İstanbul ve 2 İzmir) HAProxy makinasını hem kendi içinde hem de region bazlı nasıl yedekli çalıştırabileceğinizden bahsedeceğim.

Bu yapı AWS Route53 ve Cloudfront’un benzer yedekliliğine sahiptir. Bu makale iki seriden oluşacak. (İlk kısım Load Balancer zone yedekliliği ve ikinci kısım da DNS yedekliliği.) HAProxy kurulum ve yapılandırmasını anlatırken, kurduğunuz HAProxy’i nasıl HA çalıştırabileceğinizden bahsedeceğim. Önce sunucularınızın hostnamelerini düzenleyin.

hostname haproxy1.vahap.net
vi /etc/hostname

CentOS – RHEL üzerine kurulum yapacağım için yum ile kurulumu başlatıyorum ve haproxy kullanıcısını ekliyorum.

yum install haproxy -y
useradd haproxy

Kurulumu tamamladıktan sonra HAProxy config dosyasını yedeklemelisiniz. Bunun için de /etc/haproxy içindeki haproxy.cfg dosyasını yedekleyin.

cd /etc/haproxy
mv haproxy.cfg haproxy.cfg_yedek
cp haproxy.cfg_yedek haproxy.cfg

Bir metin editörüyle config dosyasını açın. Configi silin. Hazırladığım default config tanımlarım aşağıdadır. Kendi yapınızda kullanabilir ve kendinize göre düzenleyebilirsiniz. Aşağıdaki configi yapıştırın.

#---------------------------------------------------------------------
# Genel ayarlar.
#---------------------------------------------------------------------
global

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy             #HAProxy kullanici ve grup tanimi.
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# Bu kisimla cok duzenleme yapmayin.
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
#---------------------------------------------------------------------
#HAProxy Web Monitor yapilandirmasi.
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080                #Haproxy Web Monitor.
    mode http
    option forwardfor
    option httpclose
    stats enable
    stats show-legends
    stats refresh 5s
    stats uri /stats                             #Web monitor dizini.
    stats realm Haproxy\ Statistics
    stats auth adm_user:adm_sifre1*            #Kullanici adi ve sifre.
    stats admin if TRUE
    default_backend app-main                    #Backend tanim.
#---------------------------------------------------------------------
# FrontEnd konfigurasyonu.
#---------------------------------------------------------------------
frontend main
    bind *:80
    option http-server-close
    option forwardfor
    default_backend app-main
#---------------------------------------------------------------------
# BackEnd load balance yapilandirma.
#---------------------------------------------------------------------
backend app-main
    balance roundrobin                                     #Load balance proxy methodu.
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    #Web site kontrol - 200 status kod.
    server site1 192.168.58.58:80 check                 #Web1
    server site2 192.168.58.59:80 check                 #Web2

Bu işlemden sonra sunucunuzun hosts dosyasını düzenleyin ve uygun kayıtları ekleyin. Çünkü üstte görebileceğiniz gibi, site1 ve site2 kayıtları bir dns kaydıdır. Metin editörüyle /etc/hosts dosyasını açın ve ekleyin.

192.168.58.58 site1.vahap.net site1
192.168.58.59 site2.vahap.net site2
192.168.58.60 haproxy1.vahap.net haproxy1
192.168.58.61 haproxy2.vahap.net haproxy2
192.168.58.62 vip.vahap.net vip

HAProxy üzerinde 3 çeşit yönlendirme methodunuz var. İlki roundrobin (bir ona bir diğerine), leastconn (en az bağlantı hangi sunucudaysa ona) ve source (hangi IP’nin hangi makinaya yönleneceği) şeklindedir. Uygun olanı seçip üstteki config dosyasını düzenleyin. HAProxy servisini başlatın ve sistem açılışında da otomatik başlattırın.

systemctl start haproxy
systemctl enable haproxy

Yukarıdaki tüm işlemleri ikinci HAProxy makinanızda da uygulayın. Aynı adımları uyguladıktan keepalived kurulumunu gerçekleştirmelisiniz. Bu her iki makinanın da durumunu kontrol eden ve sorun anında listener IP’nin-trafiğin diğer makinaya geçmesini sağlayan bir yapıdır. Öncelikle Keepalived kurulumunu her iki makinada da yapın ve sonra keepalived config dosyasının yedeğini alın. Sırasıyla adımlar:

yum install keepalived -y
cd /etc/keepalived/
mv keepalived.conf keepalived.conf_yedek
cp keepalived.conf_yedek keepalived.conf

İşlem sonunda da keepalived.conf dosyasının içeriğini silin ve aşağıda oluşturduğum satırları ekleyin.

vrrp_script chk_haproxy {
  script "killall -0 haproxy" # HAProxy islemini kontrol et.
  interval 2 # 2 saniye ping araligi.
  weight 2
}

vrrp_instance VI_1 {
  interface eno16777984 # Network adaptor monitor.
  state MASTER # MASTER haproxy1 ve YEDEK haproxy2
  virtual_router_id 51
  priority 101 # Oncelik 101 HAProxy1'de ve 100 HAProxy2'de.
  virtual_ipaddress {
    192.168.58.62 # VRRP (Sanal-Listener IP adres.)
  }
  track_script {
    chk_haproxy
  }
}

Önemli noktalar: HA, VRRP ile sağlanıyor ve bu da keepalived ile oluşturuluyor. Keepalived için bir public IP adresiniz olmalı ve bu IP adresi iki HAProxy makinanızda da kullanabilir durumda olmalıdır. (Çünkü domaini bu IP’ye yönlendireceksiniz.) Üstte ki config dosyasında “eno16777984” yazan kısmı, kendi ethernet kart adınıza göre düzenleyin ve keeaplived servisini başlatın.

systemctl start keepalived
systemctl enable keepalived

Benim de kurguladığım şekilde, region bazlı da aktif-aktif çalışan bir load balancer yapısı istiyorsanız şart şu: Keepalived için eklediğiniz listener IP bloğunu, diğer veri merkezinde oluşturduğunuz HAProxy makinalarında da kullanabiliyor olmanız lazım. Bunun için isterseniz iki veri merkezi arasında MPLS hattı çektirin isterseniz de anonsları diğer veri merkezinden de yaptırın.

Aşağıda kafamdaki proje taslağını çizdim. Elbette DNS sunucularını da kendim yapılandırdım ve GeoLocation ile anycast olacak şekilde hangi şehirden istek yapılıyorsa en yakın şehirdeki veri merkezindeki yapıya yönlendiriyor. Burada sistem taraflı tüm yapı hem kendi içinde hem de lokasyon bazlı yedeklidir.

*Bilgi paylaştıkça büyür ancak içeriği paylaşırken kaynak gösterme nezaketinde bulunursanız sevinirim.

Umarım zamandan kazanmanızı sağlar.

]]>
IIS – Blue-Green Deployment (Proxy-Load Balancing, ARR Yapılandırması) https://exevolium.com/iis-blue-green-deployment-proxy-load-balancing-vs/ Sat, 26 Jan 2019 21:28:27 +0000 http://exevolium.com/?p=1457 Merhaba,

Öncelikle şu detayı belirtmekte fayda görüyorum. İlgi alanım GNU/Linux olsada fazla bilgi göz çıkarmaz edasıyla bu tür şeyleri de araştırıp not ediyorum. Aşağıda anlattığım içeriğin Türkçe dokümanı bulunmuyor ve gerçekten 0’dan bir yapı nasıl kurulur bunu içeriyor. Bu yapıyı daha da abartıp, öne iki IIS proxy makinası oluşturup birden fazla IIS makinaya trafiği yönlendirebilirsiniz. Yazı uzun ama ASP.NET/Java/.netCore Developer veya Microsoft SysAdmin iseniz ve yolunuz IIS’e çıkıyorsa okumanızı öneririm.

Bu yazıda IIS üzerinde Blue-Green Deployment nasıl yapılandırılıp kullanılacağından bahsediyorum. Bunu yaparken de aynı zamanda Load Balancer ve Proxy olarak kullanımdan (ARR) da bahsetmiş olacağım. Elbette böyle bir yapı kurmak yerine Citrix Netscaler, F5, AWS Elastic LB veya HAProxy, LVS.. vs. kullanabilirsiniz. Ancak maliyet sizin için önemliyse böyle bir yol da bulunuyor.

Blue-Green Deployment nedir ve neden kullanılsın?

Senaryo 1: Örneğin e-ticaret sisteminiz var ve gün içinde publish çıkmanız gerekli. Standartı nedir? Publish çıkılır, aktif olması için de bazen web servis reload edilir. Sorun yoksa devam eder, sorun çıkarsa da publish geri alınır. Bu aralıkta da kesinti olur. Bu durumu ziyaretçilere en az seviyede yansıtmak için de yazılım ekibi genelde akşam saatlerinde deploy çıkar veya kesintiyi kabul ederler.

İşte bu yapıda load balancer kullanmıyorsanız, IIS üzerinde “Application Request Routing“dan faydalanabilirsiniz. ARR nedir?

Bir farm yaratarak URL Rewrite’ın da yardımıyla proxy ve load balancer ortamı yaratıyorsunuz. Böylelikle IIS üzerinde tek bir site kullanmak yerine Proxy görevi görecek site yaratıp, arkada onu iki web siteye yönlendirebiliyorsunuz. Böylelikle Servers yazan sitelerden birinde publish çıkarken (down edip) trafiği diğerinden sürdürebilirsiniz. Publish’de sorun yoksa da down ettiğinizi up eder ve diğerini down edip onda publish çıkarsınız. (Ne dediğimi en sonda anlayacaksınız.) Burada kilit noktaysa sessionları web sitelerde değil, SQL’de tutmanızdır. Böylelikle geçişlerde session düşmez. (IIS üzerinde Session State kısmından yapabilirsiniz.)

Senaryo 2:Load balancer cihazların kira bedelleri, sanal load balancer sunucuların (Citrix Netscaler VPX örn.) lisans maliyeti veya da HAProxy veya LVS konfigürasyonunu yapacak teknik yeterliliğin olmaması dolayısıyla, bir load balancer-proxy görecek yapıya ihtiyacınız olabilir. Kısaca yukarıdaki görselde gördüğünüz şekilde bu makinayı sadece istekleri karşılayan ve load balancer görevi gören bir sunucu olarak da kullanabilirsiniz.

Elbette tek bir sunucuda tüm sistemi çalıştırmanızı önermiyorum ama Türkiye’de çoğu firma tek bir makinaya tüm kaynakları verip sistemi çalıştırıyor. Eğer maliyet dolayısıyla genişleyebilir yapı kullanamıyorsanız örneğin kampanya dönemlerinde çift site olarak sistemi çalıştırabilirsiniz. Bu cpunun tavan yapmasına neden olacak olsa da, requestleri kaldırabilecektir. (En iyi performansı almak için IIS iyi yapılandırmalısınız. Bu kısımda desteğe ihtiyacınız olursa sosyal medya aracılığıyla ulaşabilirsiniz.)

Blue-Green Deployment Nasıl Kurulur ve Yapılandırılır?

İşin faydalarını anlatmayı bitirdiğimiz ve teknik boyutuna geldiğimiz kısımdayız. Üstte senaryoları yazmamın nedeni, müşterinize veya üstünüze bu yapıyı önerdiğinizde “Neden buna geçelim?” sorusunun cevabı olması içindi.

Bu yapıyı kurabilmek için IIS üzerinde iki temel şeye ihtiyaç var:
a. URL Rewrite 2.1
b. Application Request Routing 3.0
(Server 2016’ya göre söyledim. 2012’de -IIS 8.x’de- 2.5 olabilir, fark etmez.)
IIS üzerindeki “Web Platform Installer” aracılığıyla yükleyebilirsiniz.

Yüklediğinizi farz ederek sonraki adıma geçiyorum. Yukarıdaki görselde olduğu gibi Sites altında Proxy görevini görecek web sitenizi oluşturun (vahap.net) ve site dosyalarınızın olacağı ana siteleri oluşturun. (web1 ve web2.)

Sonrasında IIS’i kapatın ve yeniden açın. Server Farms kısmını göreceksiniz. “Create Server Farm..” diyerek, website adını yazın. (Bu sadece isim. İsterseniz kendi adınızı yazabilirsiniz.)

Alttaki kısım önemli.

Yukarıda Server Address kısmına eklediğiniz kayıtlar aktif olmalıdır. Yani dns kaydı olmalı. İlla ki bu subdomainlere public IP vermenize ve webten erişilmelerine gerek yok. Sunucu bu kayıtların IP’sine ulaşabilsin yeter. Bu nedenle sunucuya additional IP ekleyin ve rastgele bir local IP ve subnet tanımlayın. Sonra /Windows/system32/drivers/etc/hosts dosyasına girip, bu tanımlar için IP’yi ekleyin. Tek görselde anlatmaya çalıştım. Eğer bunu yapmazsanız 502.4 – Bad Gateway alabilirsiniz.

Bu işlemi yaptıktan sonra “Create Server Farm” adımına geri dönebiliriz. Orada bir diğer önemli nokta portlar. Hangi portlar üzerinden siteleri çalıştıracaksınız? Ben WEB1 için 8001 portunu ve WEB2 için de 8002 portunu kullandım. Portları yazdıktan sonra Enter tuşuna basın ve sonra Add diyin. Karşınıza Url Rewrite ile ilgili bir bildirim çıkacaktır. NO diyerek ilerleyin. Kuralları sonra manuel ekleyeceğiz.

İşlem sonunda hem yukarıdaki gibi veya localhost:8001 ve localhost:8002 diyerek sitelere ulaşabilmeniz lazım. Elbette bir index dosyası atmayı unutmayın. Ek olarak, alt sitelerin binding kısmına dikkat edin. Yukarıdaki görselde gösterdiğim gibi binding eklemeniz lazım. 8001 ve 8002 portunu * dinlemeli.

Bu işlem bittikten sonra gelelim ana domaine. Bu domaini sadece proxy ve dns çözümleyici olarak kullanacağız. Bu nedenle “No Managed Code” olarak Application Pool’u düzenlemelisiniz. Herhangi bir ASP veya ASP.NET çalışmayacak. Sadece proxy görevi görecek ve gerekirse datastore olacak.

Eğer veri boyutu yüksek bir siteniz varsa (e-ticaret gibi) vahap.net olarak oluşturduğum alanda -tabii sizin domaininize göre isim farklıdır- web site dosyalarınızı burada tutabilirsiniz. Her iki node’a (web1 ve web2) kopyalamanıza gerek kalmaz. Örnek olması için big_data diye klasör oluşturdum ve diyelim ki boyutu 500 GB. “Add Virtual Directory” olarak ekleyerek aynı dosyayı kopyalamadan, tek bir ana dizinde gösterebildim. Bu hem disk alanından hem de iki farklı dizin kullanmaktan kurtardı. Aynı işlemi web2 üzerinde de uygulayıp, aynı dizinleri gösterdim. Eğer kullanıcı etkileşimli bir sisteminiz var ise kullanıcıların değişiklik yaptığı dizinleri virtual directory olarak eklemenizi öneririm. (Lock file olmuyor.)

Bu kısmı da yaptıktan sonra geldik URL Rewrite kuralına. Benim vahap.net olarak oluşturduğum domainin web.config dosyası şöyle:

Sizi bir zahmetten kurtararak aşağıya ekliyorum. Domain kısmını düzenlersiniz.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Alwaysup" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{HTTP_HOST}" pattern="^www.vahap.net$" />
                        <add input="{HTTP_HOST}" pattern="^vahap.net$" />
                    </conditions>
                    <action type="Rewrite" url="http://vahap.net/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Son olarak web sitenizin root folderına gelin ve o klasörden itibaren Users grubu ekli değilse ekleyin ve Modify permission tanımlayın. Bu web1, web2 ve ana domainin klasörlerini kapsamalı. Aksi halde hata alabilirsiniz. Şimdi gelelim siteleri nasıl up ve down hale getireceğinize..

Bunun için up.html isminde dosya oluşturun. Bunun içine sadece up kelimesini yazın ve web1-web2’nin folderına atın. Ana domaine atmanıza gerek yok, o sadece proxy (üstteki URL Rewrite kuralıyla beraber) ve büyük dosyaları tuttuğunuz ana folder. Sonra IIS üzerinde Server Farms altında oluşturduğunuz alana tıklayın ve sağ framede “Health Test“e tıklayın.

Yukarıdaki görselin özeti şu: Oluşturduğunuz sitelerden hangisinin up hangisinin down olduğunu burada belirtiyorsunuz. IIS doğrudan vahap.net/up.html dosyasına arkadaki nodeler (web1 ve web2) üzerinden ulaşmayı deniyor. Eğer bu dosyalara ulaşıp, içindeki up kelimesiyle match eden bir sonuç olduğunda node ayakta diyerek trafiği yönlendiriyor. Örneğin siz web1’e trafik gelmesin isterseniz çözüm basit: up.html içindeki kelimeyi down yapın. Node Unhealthy duruma düşecek ve trafik gelmeyecek. Siz de (sunucu içinden) tarayıcıya web2.vahap.net:8002 yazarak publishi çıkıp test edebileceksiniz. Sonra aynı işlemi diğerinde yapacaksınız. Böylelikle IIS ile işiniz kalmıyor. Dilerseniz de publish çıktığınız siteyi gün içinde rahatlıkla restartlayabilirsiniz.

Yukarıda gördüğünüz gibi web1.vahap.net içindeki up.html ya bulamıyor veya içindeki kelime up değil. (Down yazmıştım.) Bu nedenle onu down sayıyor. Ancak web2.vahap.net node Health Test değerleriyle uyuşuyor. Bu da trafiğin web2.vahap.net üzerinden geçeceğini gösterir. Buradaki ayarları kendinize göre uyarlayın ve Apply diyin.

Bunu yaptıktan sonra yine Server Farms altında farm adına tıklayın ve sağ framede açılan “Monitoring and Management” tıklayın. Burada hangi node aktif, response süresi ne, ne kadar request geçiyor, kaç request fail gibi detayları görebilirsiniz.

Bu yazıda nedir ve nasıl kurulurdan bahsettim. Elbette sitenizi direkt buna geçirdiğinizde absürt sorunlarla karşılaşacaksınız. Sorunlarla karşılaştıkça bana ulaşmanız halinde eğer sistem taraflıysa yardımcı olurum.

Umarım zamandan kazanmanızı sağlar.

]]>
PXE Boot – KickStart ile Network Üzerinden Çoklu ve Otomatik Sunucu Kurulumu (Linux) https://exevolium.com/pxe-boot-ve-kickstart-ile-network-uzerinden-coklu-otomatik-sunucu-kurulumu/ Sun, 28 Jan 2018 12:59:22 +0000 http://exevolium.com/?p=1165 Merhaba,

Bu anlatımda tek bir sunucu üzerinden, dhcp ile birden fazla sunucu kurulumundan bahsedeceğim. Kuruluma başlamadan önce GUI arayüzü için aşağıdaki programı indirmeniz gerekiyor. Kurulum için gerekli olacaktır.

Xming X Server for Windows

Kurmak isteyeceğim sunucular CentOS olduğu için kurulumu da CentOS üzerinden gerçekleştireceğim.

Gerekli olan bileşenler:
1. Tftp-Server
2. DHCP Server
3. Syslinux
4. CentOS isosu ya da fiziksel sunucuysa cdsi.
5. Xming X Server

Kurulum Adımları:

Sunucunuza SSH ile bağlanın.
Öncelikle sunucunuz güncel değilse update edin.

yum update -y
yum install update -y

Sonra tftp-server indirin.

yum install tftp-server -y

Tftp-server indirdikten sonra xinetd.d altında tftp dosyasına giderek, tftp enable edin.
Disable satırının karşısında yes yazıyorsa, bunu no ile değiştirdikten sonra dosyayı kaydedip çıkın.

vi /etc/xinetd.d/tftp

İşlemi gerçekleştirdikten sonra xinetd servisini yeniden başlatmalısınız.

/etc/init.d/xinetd restart

Bu işlemi tamamladıktan sonra syslinux paketini kurmanız gerekiyor. Bunun için:

yum install syslinux -y

Syslinux paketinin kurulumu tamamlandıktan sonra /var/lib/tftpboot altına syslinux dosyalarını kopyalamalısınız.

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/memdisk /var/lib/tftpboot/
cp /usr/share/syslinux/mboot.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/chain.c32 /var/lib/tftpboot/

Kopyalama işlemini tamamladıktan sonra /var/lib/tftpboot/ altında pxelinux.cfg dizini oluşturun.

mkdir /var/lib/tftpboot/pxelinux.cfg

Bu dizinin altında da default isminde bir dosya oluşturun ve metin editörüyle içine girin.

vi /var/lib/tftpboot/pxelinux.cfg/default

Default dosyası içerisine aşağıdaki satırları yapıştırın.

DEFAULT centos
PROMPT 100
LABEL centos
KERNEL images/centos/vmlinuz
APPEND ks=http://Sunucunuzun IP adresini yazın/centos/ks.cfg initrd=images/centos/initrd.img

Bu işlem sonunda /var/lib/tftpboot altında /images/centos dizinini oluşturun.

mkdir -p /var/lib/tftpboot/images/centos

İşlemi tamamladıktan sonra sunucunuza CentOS isosunu ya da cdsini takıp, mount edin.

mount /dev/cdrom /mnt/

Mount etmiş olduğunuz cd içerisinde vmlinuz ve initrd.img dizinlerini, images ve centos dizinine kopyalayın.

cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/images/
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/images/
cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/images/centos/
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/images/centos/

Bir sonraki adımdaysa DHCP Server kurulumunu gerçekleştirmeniz gerekiyor. Bunun için:

yum install dhcp -y

Kurulumu tamamladıktan sonra dhcp config dosyasını içine girin.

vi /etc/dhcp/dhcpd.conf

Aşağıdaki satırları ekleyin ve bir sonraki eklediğim görsele göre ilgili kısımları düzenleyin.

default‐lease‐time 600;
max‐lease‐time 7200;

subnet 192.168.58.0 netmask 255.255.255.0 {
authoritative;
range 192.168.58.58 192.168.58.90;
option routers 192.168.58.1;
allow unknown‐clients;
allow booting;
allow bootp;
next‐server 192.168.58.34;
filename "pxelinux.0";
}

host client1 {
option host‐name "client1";
hardware ethernet 00:0f:58:58:58:58;
fixed‐address 192.168.10.59;
}

Tanımlamayı yaptıktan sonra dhcp servisini yeniden başlatın.

/etc/init.d/dhcpd restart

Bu işlemleri tamamladıktan sonra web servisini kurmanız gerekiyor. Kickstart ile dosyaları gösterebilmek için gereklidir.

yum install httpd -y

Apache kurulumunu tamamladıktan sonra /var/www/html/centos klasörü oluşturun ve /mnt/ içindeki her şeyi bu klasöre kopyalayın.

mkdir /var/www/html/centos
cp -ar /mnt/* /var/www/html/centos/

Sonra Apache’yi (web servisini) yeniden başlatın.

/etc/init.d/httpd restart

Buraya kadar tüm işlemleri tamamladıktan sonra Xming X Server programını açın.
Aşağıdaki şekilde çalışır durumda olmalı.

Program eğer yukarıdaki gibi çalışır durumdaysa ve Putty açın ve şu ayarları tanımlayın.

Bu işlemi yaptıktan sonra Putty’de Session’a tıklayarak sunucuya yeniden bağlanın ve sırasıyla aşağıdaki komutları çalıştırın.

yum install system-config-kickstart -y
system-config-kickstart

Karşınıza aşağıdaki gibi bir ekran gelmesi gerekiyor.

Açılan ekranda yapmanız gerekenler:
1. Basic Configuration:
Burada klavye dilini ve timezone ayarlayın. Sunucunuzun root şifresini girin.
2. Installation Method:
Perform new installation seçin ve Installation Source kısmındaysa http seçerek,
Http Server kısmına sunucunuzun IP adresini yazın. Http Directory kısmına da centos yazın.
Dosyaları centos altına kopyalamıştık.
3. Partition Information:
Buradaysa kurulumunu yapacağınız sunucuların disk yapılandırmasını ayarlamalısınız.

4. Network Configuration:
Bu kısımdaysa DHCP olarak network device eklemelisiniz. Add New Device dedikten sonra ekteki gibi tanımlama yapın.

5. Firewall Configuration:
İlk etapta sorun yaşanmaması için selinux ve firewallu bu aşamada disable edin.
6. Package Selection:
Bu aşamada Base paketleri kurdurabiliriz. Base System seçip, Base seçip ilerleyebilirsiniz.

Bu düzenlemeleri yaptıktan sonra File gelip, Save diyin. Bu ks.cfg dosyasını root dizini altna kaydedin.


Sunucunun root dizininde bulunan ks.cfg dosyasını /var/www/html/centos/ altına kopyalayın.

cp ks.cfg /var/www/html/centos/

Kopyalama işleminden sonra da Apache servisini yeniden başlatın.

/etc/init.d/httpd restart

Şimdi mac adresini girdiğiniz işletim sistemi kurulumu yapılacak client sunucuyu başlatın ve dhcpden otomatik kurulumu gerçekleştirin. DHCP ve tftp-server kurulumu yaptığınız sunucuyla, otomatik kurulum yaptıracağınız sunucular aynı networkte olmalı.


DHCP’den IP ve bilgileri çekip otomatik kuruluma başlayacaktır.

Umarım zamandan kazanmanızı sağlar.

]]>
Zabbix Server ve Agent Kurulumu https://exevolium.com/zabbix-monitoring-server-ve-zabbix-agent-kurulumu/ Wed, 29 Nov 2017 14:37:33 +0000 http://exevolium.com/?p=1090 Merhaba,

Bu içeriği geriye dönük hatırlatıcı bir doküman olması ve zamandan kazanmak için hazırladım.
Öncelikle Zabbix’in stabilliği için monitör edeceğiniz host sayısına bağlı olarak aşağıdaki yapılandırmaya sahip olmanız gerekiyor:

Eğer alt yapınız kullanacağınız kaynağı destekler durumdaysa kurulum adımları da şu şekilde:

CentOS / RHEL 7.x – Zabbix 4.0.3 (latest version) Kurulum Adımları

1. Kuruluma başlamadan önce sunucuyu update edin.

yum -y update

2. Zabbix’in kurulum paketleri repository içerisinde bulunmuyor. Bu nedenle aşağıdaki işlemi gerçekleştirmelisiniz.

yum install epel-release
rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

3. Zabbix Server için gerekli paketleri yükleyin.

yum -y install zabbix-server-mysql zabbix-web-mysql mysql mariadb-server httpd php

4. Veritabanı sunucusunu başlatın ve sistem açılışında otomatik başlamaya ayarlayın.

systemctl start mariadb
systemctl enable mariadb

5. MySQL’in güvenlik yapılandırmasını ayarlayın. Seçenekleri kendinize uygun şekilde belirleyip MySQL root şifresi tanımlayın.

mysql_secure_installation

6. MySQL’e giriş yapın. (Şifreniz bir önceki adımda tanımladığınız şifredir.)

mysql -u root -p

7. MySQL’e girdikten sonra sırasıyla aşağıdaki komutları uygulayın. ‘MySQLUSERSIFRE’ kısmında MySQL user için kullanıcı şifresini tanımlayın.

create database monitor_db;
grant all privileges on monitor_db.* to monitor_user@localhost identified by 'MySQLUSERSIFRE';
flush privileges;
exit

8. Zabbix’in schema veritabanını içe aktarın.

cd /usr/share/doc/zabbix-server-mysql-4.0.3/
gunzip create.sql.gz
mysql -u root -p monitor_db < create.sql

9. Zabbix Server configuration file düzenleyin. Tercih ettiğiniz metin editörüyle (örn. vi) aşağıdaki conf dosyasını açın.

vi /etc/zabbix/zabbix_server.conf

9.a. Aşağıdaki satırları bulun ve düzenleyin. Yorum satırı halindeyse (başında # varsa kaldırın) aktif edin.

DBHost=localhost
DBName=monitor_db
DBUser=monitor_user
DBPassword=TanimladiginizPassword

Bu tanımları yapıp, DBHost satırını aktif ettikten sonra kaydedip çıkın.
10. PHP ayarlarını düzenleyin. /etc/php.ini dosyasını metin editörüyle açın ve aşağıdaki satırları bulup bu şekilde düzenleyin.

max_execution_time = 600
max_input_time = 1000
memory_limit = 1024M
post_max_size = 32M
upload_max_filesize = 32M
date.timezone = Europe/Istanbul

11. Firewalla kural girin. (Firewalld / Iptables kapalıysa bu adımı atlayabilirsiniz.)

firewall-cmd --permanent --add-port=10050/tcp
firewall-cmd --permanent --add-port=10051/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload 
systemctl restart firewalld

12. Selinux’u (önerilmez) kapatın ya da Zabbix bağlantısı için kural tanımlayın. Kural tanımlamak için aşağıdaki komutu kullanın.

setsebool -P httpd_can_connect_zabbix=1

13. Zabbix Server ve Web servisini başlatın. Sistem açılışında otomatik başlamaya ayarlayın.

systemctl start zabbix-server
systemctl enable zabbix-server
systemctl start httpd
systemctl enable httpd

Not: Eğer Zabbix start olmazsa Selinux’u kapatın. Bunu yapmak için aşağıdaki dosyayı açın ve enforcing yazısını, disabled ile değiştirin.

vi /etc/selinux/config

14. Tarayıcıya http://IP adresiniz/zabbix yazarak Zabbix’e ulaşabilirsiniz. Şimdi web taraflı yapılandırmayı tamamlamalısınız.

14. a. Açılan Welcome ekranında Next diyerek ilerleyin.
14. b. Bir sonraki ekranda php extensionları ve tanımlar kontrol ediliyor. Muhtemelen sorun yaşamazsınız ama hata veren bir satır varsa /etc/php.ini’ye dönüp düzenleyin. Sorun yoksa Next diyerek ilerleyin.
14. c. Database bağlantısı için 7. adımda tanımladığınız bilgileri girin. Default port 0 bırakabilirsiniz.
Database MySQL olacak ve Database host localhost olmalı.
14. d. Host kısmına sunucunuzun IP adresini yazmalısınız. Port 10051 ve name kısmına da server adını yazabilirsiniz.
14. e. Son adımda tüm bilgileri kontrol edebileceğiniz bir ekran karşınıza gelecek. Next step diyerek kurulumu tamamlayabilirsiniz.

Windows Sunucuya Zabbix 3.4.0 (Latest Version) Agent Kurulumu

Windows sunucuya Zabbix Agent kurulumuna başlamadan önce aşağıdaki linke tıklayıp, agent install ve conf dosyasını indirin.

Windows 3.4.0 Zabbix Agent İndirmek İçin Tıklayınız.

1. İndirdiğiniz dosyayı C: diskine taşıyın ve zabbix isminde klasör oluşturup zip dosyasını çıkartın.
2. Çıkardığınız dosyaları (bin ve conf) zabbix klasörünün ana dizinine kopyalayın.
3. Command Prompt (cmd) açın ve aşağıdaki komutları uygulayın.

C:\zabbix\bin\win64\zabbix_agentd.exe --config C:\zabbix\conf\zabbix_agentd.win.conf --install

4. C:\zabbix\conf içerisine girip, zabbix_agentd.win.conf içerisinde şu satırları bulup düzenleyin.

Server=Zabbix Server'ın IP Adresini Yazın.
ServerActive=Zabbix Server'ın IP Adresini Yazın.
Hostname=Sunucunuzun Computer name Yazın.

Eğer üstteki satırlar yorum satırı halindeyse başındaki # kaldırıp aktif edin.

5. Servisi başlatın.

C:\zabbix\bin\win64\zabbix_agentd.exe --start

6. Firewall üzerinde 10050 portunu Inbound olacak şekilde açık hale getirin. Güvenlik için Zabbix IP adresini tanımladığınız bir Scope oluşturun.

Linux Sunucuya Zabbix Agent Kurulumu

Ubuntu için aşağıdaki komutları sırasıyla uygulayın.

wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb
dpkg -i zabbix-release_3.2-1+xenial_all.deb
apt-get update
apt-get install zabbix-agent
service zabbix-agent start

CentOS/RHEL için aşağıdaki komutları sırasıyla uygulayın.

rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
yum update -y
yum install zabbix-agent
systemctl start zabbix-agent

Firewalld / Iptables üzerinde 10050 portunu açın.

Umarım zamandan kazanmanızı sağlar.

]]>
Windows DFS “Value does not fall within the expected range” Problemi https://exevolium.com/windows-2012-2016-dfs-value-does-not-fall-within-the-expected-range-problemi/ Mon, 10 Jul 2017 07:39:03 +0000 http://exevolium.com/?p=942 Merhaba,

1 ay önce çıkan .NET Framework 4.7 update yüzünden dfs içerisinde namespace/replication group oluşturmak için, sunucuları seçtiğiniz ekranda Browse dediğinizde “Value does not fall within the expected range” hatası alabilirsiniz.

Bunun sebebi bu framework güncellemesiyle gelen updatelerin dfs ile çakışması. Bu updateler de şöyle:

kb:3186568 ve kb:3186539

Bu iki update paketinden birisi muhakkak sunucunuzda kuruludur. Powershell üzerinden aşağıdaki komutlarla bu paketleri uninstall edin.

wusa /uninstall /kb:3186539
wusa /uninstall /kb:3186568

——————–
04.11.2017 Update-Güncelleme:
——————–

wusa /uninstall /kb:4041691

Windows Server 2016’da üstteki iki paketi kaldırmanıza rağmen çözüm olmuyorsa 4041691 kaldırın.

Sonrasında yeniden DFS üzerinde işlemlerinizi gerçekleştirin. Bu sorunla ilgili şu an internette güncel bir makale yok.
O sebeple benim gibi zaman kaybı yaşamayın diye içerik girdisi oluşturuyorum.

Önemli not:DFS için kullanacağınız sunucularda ve Active Directory sunucunuzdan bu paketleri uninstall etmelisiniz.
Önemli not2:Bu sorunu Windows Server 2012 ve Windows Server 2016’da yaşadım.

Umarım zamandan kazanmanızı sağlar.

]]>
cPanel’de Gzip Çalışmama Sorunu ve Gzip Aktif Etme İşlemi (Mod_deflate) https://exevolium.com/cpanelde-gzip-aktif-etme-ve-calismama-sorunu-mod_deflate/ Mon, 29 May 2017 13:00:34 +0000 http://exevolium.com/?p=933 Merhaba,

cPanel’de gzip sıkıştırma yöntemini aktif etmek için mod_deflate enable etmeniz gerekiyor. Eğer EasyApache üzerinden Apache’yi derlerken mod_deflate modülünü enable etmenize karşın hala enable gözükmüyorsa aşağıdaki adımı uygulamalısınız.

cPanel’den MultiPHP INI Editor bulun ve Editor Mode‘a geçin. Oradan sitenizi çalıştırdığınız php versiyonunu seçin.
Aşağıdaki satırları bulun ve altta ilettiğim şekilde düzenleyin.

output_handler = Off
zlib.output_compression = On
zlib.output_handler = ob_gzhandler

Eğer kullandığınız cPanel versiyonunda MultiPHP INI Editor tarzı bir seçenek yoksa Php Configuration Editor bulun ve Advanced Mode gelip bu tanımlamaları yapın. En sonunda Optimize Website kısmından Compress enable edebilirsiniz. Daha önceden enable duruma getirdiyseniz Apache’yi yeniden başlatıp tekrar kontrol edin. Alttaki sayfayı cPanel’de göremiyorsanız WHM’de Feature Manager kısmından enable edebilirsiniz.


SSH bağlantınız olan bir sunucu varsa gzip’in enable olup olmadığını curl komutuyla kontrol edebilirsiniz.

curl -I -H 'Accept-Encoding: gzip,deflate' http://vahap.net

Content-Encoding: gzip çıktısıyla karşılaşmanız lazım. Eğer bu çıktıyla karşılaşıyorsanız sunucunuzda gzip aktifleşmiş demektir.
.htaccess üzerinden de sıkıştırmak istediğiniz typeları belirlemeniz mümkün.

Apache için aşağıdaki satırları .htaccess üzerinde kullanabilirsiniz.

<IfModule mod_deflate.c>
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE application/x-font
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-truetype
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE font/opentype
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml

  # Remove browser bugs (only needed for really old browsers)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>

Umarım zamandan kazanmanızı sağlar.

]]>
VMWare’de SSH Üzerinden Task Silme ve İptal Etme İşlemi https://exevolium.com/vmwarede-task-silme-ve-iptal-etme-islemi/ Wed, 24 May 2017 17:46:01 +0000 http://exevolium.com/?p=927 Merhaba,

Bu işlem için öncelikle sunucunun çalıştığı hosta ssh ile bağlanmalısınız.
(vCenter yapısı üzerinde çalıştığınızı düşünerek böyle belirtiyorum. Tek bir host varsa hosta ssh ile bağlanın.)

Hosta ssh ile bağlanabilmek için aşağıdaki adımları uygulamanız gerekiyor:
Hostun (IP adresinin) üzerine tıklayın. Sağ framede Configuration>Security Profile>Firewall’un üstündeki Properties’e tıklamalısınız.
Yeni açılan ekranda Secure Shell enable edebilirsiniz. O ekranda yine scope tanımlayıp, belirli IPlerin erişimine izin verebilirsiniz.


SSH ile bağlandıktan sonra sırayla aşağıdaki komutları uygulayın.
Bu komutla sunucunun WorldNumber göreceksiniz. Bu WorldNumber sunucunun ID’sidir.

esxcli vm process list

Aşağıdaki komutla da, sunucuya ait bütün taskları iptal edebilirsiniz.

esxcli vm process kill --type=[soft,hard,force] --world-id=WorldNumber

Örn kullanım: esxcli vm process kill –type=force –world-id=34534534

agent restart
/sbin/services.sh restart

Bu işlemleri yaptıktan sonra host üzerindeki servisleri restart ediyorsunuz, bu biraz zaman alabilir.
Sonrasında host disconnected olarak gözükecek, bunun nedeni servis restartlandığında vCenter ile olan bağlantısının kopmasındandır. (Eğer vCenter yapısı üzerinde çalışıyorsanız.) Yoksa host üzerinde çalışan sunuculara bir şey olmuyor. Sorunsuz servis restartlandığında tekrar bağlantı gelecektir. Host vCenter’a geldiğinde vSphere HA failover in progress gibi bir uyarı görebilirsiniz. Bunu gidermek için Cluster üzerine sağ tık> Edit Settings> Turn On vSphere HA tikini kaldırıyorsunuz. Alttaki tasklar tamamlandıktan sonra yeniden bunu aktif ediyorsunuz. (Bu kısım -vCenter varsa- sunucuların otomatik hostlar arasında migrate olmasını sağlayan kısım.)

Umarım zamandan kazanmanızı sağlar.

]]>
Graylog(2.2), Elasticsearch(5.2) ve MongoDB Kurulumu (Ubuntu 16.04) https://exevolium.com/graylog-elasticsearch-ve-mongodb-kurulumu-ubuntu-16-04/ Sat, 18 Mar 2017 00:17:10 +0000 http://exevolium.com/?p=839 Merhaba,

Graylog 2.2 kurulumuna başlamadan önce Elasticsearch kurmalı ve Elasticsearch kullanabilmek için de Java kurmuş olmalısınız.
Graylog 2.2 kurulumuna geçmeden önce sırayla aşağıdaki içerikleri inceleyip, işlemleri uyguladıktan sonra bu sayfaya dönün.

1. Adım: Linux Sunucu Üzerine Java Kurulumu (Ubuntu 16.04/CentOS7)
2. Adım: Elasticsearch (5.2.2 latest version) Kurulumu ve Yapılandırması

Yukarıdaki ilk iki adımı tamamladıktan sonra veritabanı olarak MongoDB kurulumunu yapmanız gerekiyor.
Bunun için aşağıdaki komutları sırasıyla uygulayın.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
sudo echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update -y
sudo apt-get install mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod

MongoDB kurulumunu tamamlayıp, sistem açılışında otomatik olarak başlayacak şekilde ayarladık ve başlattık.
Şimdi Graylog 2.2 (Latest version) kurulumuna geçebilirsiniz. Kurulum için aşağıdaki komutları uygulayın.

wget https://packages.graylog2.org/repo/packages/graylog-2.2-repository_latest.deb
sudo dpkg -i graylog-2.2-repository_latest.deb
sudo apt-get install apt-transport-https
sudo apt-get update -y
sudo apt-get install -y graylog-server
sudo systemctl enable graylog-server.service
sudo systemctl start graylog-server.service

Bu adımları sırayla uyguladıktan sonra, kurulum tamamlanmış ve sistem açılışında otomatik başlamış olacaktır.

Graylog 2.2 Yapılandırması ve Web Interface Enable Edilmesi

Öncelikle sunucuya pwgen kurulumunu gerçekleştirin. Konfigürasyon için bu yapı lazım olacak.

sudo apt-get install pwgen

Bu yapıyı kurduktan sonra aşağıdaki komutu çalıştırın ve elde ettiğiniz çıktıyı kenara not alın.

pwgen -N 1 -s 96

Sonrasında Graylog’un admin paneline girişte kullanacağınız şifreyi oluşturun.

echo -n password | sha256sum

#password kısmına tanımlamak istediğiniz şifreyi yazın.

Her iki çıktıyı da not alın ve sonrasında aşağıdaki gibi server.conf dosyasını açın.

sudo nano /etc/graylog/server/server.conf

Yukarıdaki config dosyasını açtıktan sonra #password_secret = bulup, karşısına pwgen ile oluşturduğunuz çıktıyı yapıştırın.
Sonrasında #root_password_sha2= bulup karşısına sha256sum ile oluşturduğunuz çıktıyı yapıştırın.

Bu config dosyasında bulup değiştirmeniz satırlar aşağıdadır:

password_secret = pwgen ile oluşturduğunuz çıktıyı yapıştırın.
root_password_sha2 = sha256sum ile oluşturduğunu şifrenin çıktısını yapıştırın.
root_email = Mail adresinizi yazın.
root_timezone = UTC
elasticsearch_discovery_zen_ping_unicast_hosts = Sunucunun ip adresini yazın:9300
is_master = true
elasticsearch_max_docs_per_index = 20000000
elasticsearch_max_number_of_indices = 20
elasticsearch_shards = 1
elasticsearch_replicas = 0

*Düzenlemeleri yaptıktan sonra başlarındaki # işaretini kaldırıp satırı aktifleştirmeyi unutmayın.
Basic konfigürasyon işlemlerini tamamladınız. Dosyayı kaydedip çıkın.

Graylog 2.2 (Latest Version) Web Interface Yapılandırması

sudo nano /etc/graylog/server/server.conf

Yeniden yukarıdaki config dosyasına girin ve aşağıdaki satırları bulun.

rest_listen_uri = http://Sunucunun ip adresini yazın:12900/
web_listen_uri = http://Sunucunun ip adresini yazın:9000/

Başlarındaki # işaretini kaldırıp kaydedip çıkın ve aşağıdaki komutları uygulayın.

sudo systemctl daemon-reload
sudo systemctl restart graylog-server

Eğer herhangi bir hata yapmadıysanız netstat -ntlp komutunu çalıştırdığınızda 9000 ve 27017 portlarının Listen durumda olması gerekiyor.

root@server:~# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      20407/mongod
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1220/sshd
tcp6       0      0 127.0.0.1:9350          :::*                    LISTEN      22766/java
tcp6       0      0 ::1:9350                :::*                    LISTEN      22766/java
tcp6       0      0 xx.xxx.xx.xxx:9000      :::*                    LISTEN      22766/java
tcp6       0      0 xx.xxx.xx.xxx:9200      :::*                    LISTEN      22640/java
tcp6       0      0 xx.xxx.xx.xxx:9300      :::*                    LISTEN      22640/java
tcp6       0      0 :::22                   :::*                    LISTEN      1220/sshd

Eğer karşılaştığınız çıktı yukarıda olduğu gibiyse artık Graylog arayüzüne aşağıdaki adresten ulaşabilirsiniz.
Tarayıcıya http://sunucuipadresi:9000 yazarak web arayüzünü kullanıma başlayabilirsiniz.

Umarım zamandan kazanmanızı sağlar.

]]>